C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

这篇具有很好参考价值的文章主要介绍了C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近的项目要求读取xls文件内的单元格,并且单元格旁边会有复选框标识类型。

搜了下只有java的POI有例子,NOPI看项目文档好像是没有实现读取控件的功能。

java实现 POI 

POI如何解析出excel 中复选框是否被选中

https://blog.csdn.net/qq_29832217/article/details/104413475 

C#导出 Excel 时, 生成 CheckBox 控件  https://www.cnblogs.com/wisdo/p/9970922.html

 文章来源地址https://www.toymoban.com/news/detail-632345.html

 

 

直接上代码:

 1 using Excel = Microsoft.Office.Interop.Excel;
 2 using Range = Microsoft.Office.Interop.Excel.Range;
 3 using Shape = Microsoft.Office.Interop.Excel.Shape;
 4 var excelApp = new Excel.Application();
 5       var excelApp = new Excel.Application();
 6     Excel.Workbook wb = null;
 7     excelApp.Visible = true;//代码运行时是否显示excel界面
 8     excelApp.DisplayAlerts = false;//代码运行时是否显示警告
 9     excelApp.AlertBeforeOverwriting = false;//覆盖保存的时候是否提示
10     fi = new FileInfo(filepath);
11     var counter = 0;
12     string name = "";
13     try
14     {
15     wb = excelApp.Workbooks.Open(fi.FullName);//打开excel文件。
16     Excel.Worksheet ws = wb.Worksheets[3] as Excel.Worksheet;//选择对应 sheet
17     //var control = ws.Shapes._Default(0);
18     var count = ws.Shapes.Count;//获取总过有多少相关控件,一个控件需要一个shape
19     var chk = ws.CheckBoxes(1);//通过CheckBoxes的下标去获取CheckBox 最大值看excel表格的sheet里面有多少个
20     var chk1 = ws.CheckBoxes(13);//厂标
21     var chk2 = ws.CheckBoxes(14);//特殊要求
22     string PumpColor = "";
23     if (chk1.Value == 1)
24     {
25     PumpColor = chk1.Text + ":" + PumpColorDes;
26     }
27     if (chk2.Value == 1)
28     {
29     PumpColor = chk2.Text + ":" + PumpColorDes;
30     }
31     if (chk1.Value != 1 && chk2.Value != 1)
32     PumpColor = PumpColorDes;
33     this.txtFopResult.Text = PumpColor.Replace("\n","\r\n");
34 }
35     catch (Exception ex)
36     {
37     MessageBox.Show(ex.Message);
38     }
39     finally
40     {
41     excelApp.Quit(); //退出excel应用,否则进程会一直存在
42     excelApp = null;
43     }

 

 

查找控件其实比较简单,但是因为先看了最上面两个例子,测试的时候发现所有的CheckBox并不会都读取到。然后分析了一下里面Worksheets的类型。相关的控件类型可以直接取出来,但是类型是dyncmic类型的,所以调试的时候看变量什么的不方便。

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

 相关的属性字段可以从官网查询,然后调试的时候,从VS的监视变量里去手动读取。

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

 

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

定位这些CheckBox可以通过修改一下这个CheckBox的名字,或者选中状态,或者CheckBox.Text显示的文字,如果excel模板是固定的,一般获取用的下标就是固定的。

我这里用的是  13和14,测试了别的用同一个模板做的表格都正常解析了。

20     var chk1 = ws.CheckBoxes(13);//厂标
21     var chk2 = ws.CheckBoxes(14);//特殊要求

 

番外:

使用过程中的报错,WInForm能正常运行并解析表格,但是集成进Windows Service后,就报 无法访问。

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

 

参考了下面两个例子。

 

Microsoft Office Excel不能访问文件*.xls的解决方案

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 败,原因是出现以下错误: 80080005

集成到Windows servcie报错的解决方法(不一定正确,我是这样试了然后就正常了的)

第一步,找到部署的Windows服务实例,进入【属性】——【登录】界面。 勾选 【允许服务与桌面交互】,这个默认是没有勾选上的。

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

第二部,按照上面连接的给的例子,例子是 部署在IIS上,在组件服务里的DCOM -Microsoft Excel Appliction 增加NETWORK SERVICE用户权限,我这边因为是部署在内网,就直接把相关选项的权限设置成Everyone。

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

 

 并设置 【标识】栏目的,不要设置成【交互式用户】,交互式用户需要服务器登录进去,才有用,比如远程桌面登录进去,但是一把远程桌面关掉,用户就注销了,DCOM组件就用不了了,之前在金蝶也碰到这个现象,远程进去后,再断开,他们客户端就连不上,再远程桌面登录进去,又能用了。

选择下列用户,并从【浏览】按钮进去选择用户,不要自己手动输入,手动输入可能的是没用的(我自己手输入我电脑的用户名,密码也是对的,点应用也验证通过了,但是就是不行) 记住,设置完如果还没用,重启下电脑或者服务器看看

C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

 

到了这里,关于C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包