C# 讀取帶CheckBox覆選框控制項的表格-並集成到Windows Service裡面

来源:https://www.cnblogs.com/LooongTimeNoSee/archive/2023/08/08/17613476.html
-Advertisement-
Play Games

最近的項目要求讀取xls文件內的單元格,並且單元格旁邊會有覆選框標識類型。 搜了下只有java的POI有例子,NOPI看項目文檔好像是沒有實現讀取控制項的功能。 java實現 POI POI如何解析出excel 中覆選框是否被選中 https://blog.csdn.net/qq_29832217/a ...


最近的項目要求讀取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

 

 

 

直接上代碼:

 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類型的,所以調試的時候看變數什麼的不方便。

 相關的屬性欄位可以從官網查詢,然後調試的時候,從VS的監視變數里去手動讀取。

 

定位這些CheckBox可以通過修改一下這個CheckBox的名字,或者選中狀態,或者CheckBox.Text顯示的文字,如果excel模板是固定的,一般獲取用的下標就是固定的。

我這裡用的是  13和14,測試了別的用同一個模板做的表格都正常解析了。

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

 

番外:

使用過程中的報錯,WInForm能正常運行並解析表格,但是集成進Windows Service後,就報 無法訪問。

 

參考了下麵兩個例子。

 

Microsoft Office Excel不能訪問文件*.xls的解決方案

檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失 敗,原因是出現以下錯誤: 80080005

集成到Windows servcie報錯的解決方法(不一定正確,我是這樣試瞭然後就正常了的)

第一步,找到部署的Windows服務實例,進入【屬性】——【登錄】界面。 勾選 【允許服務與桌面交互】,這個預設是沒有勾選上的。

第二部,按照上面連接的給的例子,例子是 部署在IIS上,在組件服務里的DCOM -Microsoft Excel Appliction 增加NETWORK SERVICE用戶許可權,我這邊因為是部署在內網,就直接把相關選項的許可權設置成Everyone。

 

 並設置 【標識】欄目的,不要設置成【互動式用戶】,互動式用戶需要伺服器登錄進去,才有用,比如遠程桌面登錄進去,但是一把遠程桌面關掉,用戶就註銷了,DCOM組件就用不了了,之前在金蝶也碰到這個現象,遠程進去後,再斷開,他們客戶端就連不上,再遠程桌面登錄進去,又能用了。

選擇下列用戶,並從【瀏覽】按鈕進去選擇用戶,不要自己手動輸入,手動輸入可能的是沒用的(我自己手輸入我電腦的用戶名,密碼也是對的,點應用也驗證通過了,但是就是不行) 記住,設置完如果還沒用,重啟下電腦或者伺服器看看

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:樹洞君 \ 鏈接:https://juejin.cn/post/7064376361334358046 # 事故描述 從6點32分開始少量用戶訪問app時會出現首頁訪問異常,到7點20分首頁服務大規模不可用,7點36分問題解決。 # 整體經過 6:58 發現報警,同時發現群里反饋首頁出現網路繁 ...
  • ## 一. 時間複雜度 - 時間複雜度簡單的說就是一個程式運行所消耗的時間,叫做時間複雜度,我們無法目測一個程式具體的時間複雜度,但是我們可以估計大概的時間複雜度。 - 一段好的代碼的就根據演算法的時間複雜度,即使在大量數據下也能保持高效的運行速率,這也是我們學習演算法的必要性。 ### 1.1 大O表 ...
  • ### 寫在前面 也許現在的你需要用PB完成畢業設計、需要維護遠古時代的代碼,又或者是你呆的公司就是要求要用PB開發項目。 不管你是出於什麼原因還在使用PB,不可否認PB在數據視窗非常優秀,熟練使用之後開發資料庫相關的應用非常高效 但由於PB這一框架出現得比較早,而且主要用於傳統基於資料庫得CS開發 ...
  • # UnityStats 屬性詳解 UnityStats 是 Unity 引擎提供的一個用於監測游戲性能的工具,它提供了一系列的屬性值,可以幫助開發者解游戲的運行情況,從而進行優化。本文將詳細介紹 UnityStats 的每個屬性值,並提供多個使用例子幫助開發者更好地使用 UnityStats。 # ...
  • 根據客戶需求,要在TreeView目錄樹上顯示10萬+個節點,但是目錄樹顯示10萬加節點後,整個頁面操作起來非常卡,所以給目錄樹增加了虛擬化設置。但是虛擬化設置一直沒生效,後來經過排查發現是使用的自定義滾動條導致了虛擬化設置沒有生效,後來自己寫了一個滾動條樣式,問題解決了。 目錄樹虛擬化設置屬性 W ...
  • [toc] # MiniMalAPi - 最小的api, 請求都寫在Program.cs中, 可以做微服務 ## Demo ### Program.cs ```c# //基本請求 app.MapGet("/GetTest", () => new { result = "123", code = 20 ...
  • ## 一:背景 ### 1. 講故事 前段時間有位朋友找到我,說他的程式記憶體會出現暴漲,讓我看下是怎麼事情?而且還告訴我是在 Linux 環境下,說實話在Linux上分析.NET程式難度會很大,難度大的原因在於Linux上的各種開源工具主要是針對 C/C++, 和 .NET 一毛錢關係都沒有,說到底 ...
  • 本篇文章將帶你認識C#的新語法、創建項目、發佈運行、讀取的相關操作、MVC開發、擴展、各種容易的使用,許可權等.NET的相關知識。帶你從零到精通,全面掌握.NET5的開發技能。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...