找回密码
 立即注册

QQ登录

只需一步,快速开始

刘洋

注册会员

8

主题

16

帖子

166

积分

注册会员

积分
166
刘洋
注册会员   /  发表于:2023-2-19 19:17  /   查看:2214  /  回复:11
50金币
本帖最后由 刘洋 于 2023-2-20 01:49 编辑

我写了一个webAPI。
功能涉及到对excel文件的操作
代码中的地址用的是绝对地址c:\xxx\xx.xlsx


发布之前本地调试没问题。发布之后,调用API失败。


猜想一定是路径的问题(服务器的物理路径下已经放置了excel文件)。
问题就是:涉及到本地文件引用的API。路径应该怎么写。试过了url路径和本地路径,都不行。
附上c#代码和工程文件,跪求解决方案
  1. using System.Collections.Generic;
  2. using Excel = Microsoft.Office.Interop.Excel;
  3. using GrapeCity.Forguncy.ServerApi;
  4. using System.Diagnostics;
  5. using System;

  6. namespace excelforhzgpost
  7. {
  8.     public class Class1 : ForguncyApi
  9.     {
  10.         [Post]
  11.         public void excelforhzg()
  12.         {
  13.             var from = Context.Request.ReadFormAsync().Result;
  14.             var path = from["path"][0];
  15.             Excel.Application myApp = new Excel.Application();
  16.             object missing = System.Reflection.Missing.Value;//设置object的默认值,需要添加名称空间using System.Reflection;
  17.             //string path = @"http://127.0.0.1/xx/upload/priceList.xlsx";
  18.             Excel.Workbook wb = myApp.Workbooks.Open(Convert.ToString(path));
  19.             int sheetCount = wb.Worksheets.Count;//sheet数量
  20.             for (int i = 1; i <= sheetCount; i++)
  21.             {
  22.                 Excel.Worksheet ws = wb.Worksheets[i];
  23.                 string pinzhong = ws.Name;
  24.                 //int rows = ws.Rows.Count;//总行数
  25.                 //int cols = ws.Columns.Count;//总列数
  26.                 int rows = ws.UsedRange.CurrentRegion.Rows.Count;//总行数
  27.                 int cols = ws.UsedRange.CurrentRegion.Columns.Count;//总列数;
  28.                 for (int r = 3; r <= rows; r++)
  29.                 {
  30.                     string changdustr = Convert.ToString(ws.Rows[r].Cells[1].Value);//长度str                    
  31.                     for (int c = 2; c <= cols; c++)
  32.                     {
  33.                         string jg = Convert.ToString(ws.Rows[r].Cells[c].Value);//判断非空str

  34.                         string zhijingstr = ws.Rows[2].Cells[c].Value;//直径字符串                                                   

  35.                         if (changdustr != null && zhijingstr != null && jg != null)
  36.                         {
  37.                             int zhijing = int.Parse(System.Text.RegularExpressions.Regex.Replace(zhijingstr, @"[^0-9]+", ""));//直径int
  38.                             double changdu = double.Parse(changdustr);
  39.                             double jiage = double.Parse(jg);//价格
  40.                             this.DataAccess.AddTableData("产品价格表", new Dictionary<string, object>
  41.                             {
  42.                                 {"产品编号", pinzhong },
  43.                                 {"长度",changdu },
  44.                                 {"直径",zhijing },
  45.                                 {"标准价",jiage }
  46.                             });
  47.                         }
  48.                     }
  49.                 }
  50.             }
  51.             myApp.Quit();
  52.             System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);
  53.             myApp = null;
  54.             //创建进程对象
  55.             Process[] ExcelProcess = Process.GetProcessesByName("Excel");
  56.             //关闭进程
  57.             foreach (Process p in ExcelProcess)
  58.             { p.Kill(); }
  59.         }
  60.     }
  61. }
复制代码


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

11 个回复

正序浏览
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2023-2-21 08:42:50
13#
回复 使用道具 举报
数据民工悬赏达人认证 活字格认证
高级会员   /  发表于:2023-2-20 23:31:04
11#
本帖最后由 数据民工 于 2023-2-20 23:40 编辑
刘洋 发表于 2023-2-20 23:04
问题解决了。但是不知道为什么。说一下我解决问题的过程吧。

首先通过8楼版主大大的指点,思路聚焦到代 ...

看了一圈资料,原因可能是注册表被错误改动了或者某些系统服务未启动,造成引用了一个不可用目录,你把可用的目录复制进去,变得可用了,实质上发生这种错误是因为desktop被错误的重定向了


试试这个方法,还原桌面路径为默认值,这个方法应该比较正统一点。




以上仅供参考

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +5 收起 理由
David.Zhong + 5 很给力!

查看全部评分

回复 使用道具 举报
刘洋
注册会员   /  发表于:2023-2-20 21:16:18
9#
David.Zhong 发表于 2023-2-20 13:51
大佬,发布到本地调试一下,看看具体是哪报错了,报错的信息是啥。
调试服务端自定义Web API - 活字格V8帮 ...

本地调试没问题。可是本地发布之后(127.0.0.1),运行程序-->附加进程-->点击命令,不能触发代码运行。
回复 使用道具 举报
David.Zhong讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2023-2-20 13:51:46
8#
大佬,发布到本地调试一下,看看具体是哪报错了,报错的信息是啥。
调试服务端自定义Web API - 活字格V8帮助手册 - 葡萄城产品文档中心 (grapecity.com.cn)
回复 使用道具 举报
renho活字格认证
银牌会员   /  发表于:2023-2-20 12:06:16
7#
那不可能,应该就是你插件开发的问题了
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2023-2-20 11:24:29
6#
要么填一下我们这边的1V1申请:https://www.grapecity.com.cn/applyonline
通过申请后会有专门代码技术联系您,给您提供一个月免费的快速支持通道
回复 使用道具 举报
刘洋
注册会员   /  发表于:2023-2-20 10:17:49
5#
或者是不是活字格本地调试的服务和发布后的服务环境不一样啊。有些依赖dll找不到呢?有没有人给讲讲,本体调试用的是什么服务
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2023-2-20 09:49:09
4#
汗颜,代码是真的不太懂,看看有没有大神能施以援手的~
回复 使用道具 举报
刘洋
注册会员   /  发表于:2023-2-20 00:43:35
3#
renho 发表于 2023-2-19 20:45
把地址整成参数,动态传进去

试过了。还是不行啊。一样是本地调试可以,发布就不行了。本地发布也不行。不过还是谢谢你
回复 使用道具 举报
renho活字格认证
银牌会员   /  发表于:2023-2-19 20:45:22
2#
把地址整成参数,动态传进去
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部