亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 C# 將大型多個 Excel 工作表中的數據讀取到列表中

如何使用 C# 將大型多個 Excel 工作表中的數據讀取到列表中

C#
HUX布斯 2023-08-20 14:46:13
我在一個 Excel 文件中有兩個大型數據工作表(25k 行)。工作表數據采用以下格式。表1:資訊| 身份證 | 信息描述| 信息類型 | 數據類型| 費率格式25 | 25 5 | 費用| 薪資| 數字| $$$.$$250 | 250 2 | 膳食| 午餐| 數字| $$$$.$$350 | 350 25 | 25 詳情 | 更多詳情 | 文本375 | 375 25 | 25 測試| | 12345 | 文本表2:資訊| 身份證 | 證書編號 | 證書值25 | 5 | 2500 | 25000.00250 | 20 | 2222 | 5200.05350 | 25 | 32156 | 2500375 | 25 | 12564 | 25.00我試圖 1) 將行讀入兩個單獨的列表,2) 使用兩個工作表上的公共屬性(信息和 ID)將數據合并到一個公共列表中。3)檢查/驗證每行數據。例如,檢查是否有任何數據類型不正確或為空。我嘗試將行讀取到單獨的列表中,但完成閱讀第一個工作表本身需要更長的時間。請協助了解如何有效地將這些工作表數據讀取到一個列表中并驗證每個列值。Excel.Application xlApp = new Excel.Application();            Excel.Workbook xlWorkBook;            Excel.Worksheet xlSheet1WorkSheet;            Excel.Worksheet xlSheet2WorkSheet;            int iRow;            xlApp = new Excel.Application();            xlWorkBook = xlApp.Workbooks.Open(wsFile);            xlSheet1WorkSheet = xlWorkBook.Worksheets["SHEET1"];            Excel.Range xlSheet1Range = xlSheet1WorkSheet.UsedRange;            int xlSheet1RowCount = xlSheet1Range.Rows.Count;            int xlSheet1ColCount = xlSheet1Range.Columns.Count;            xlSheet2WorkSheet = xlWorkBook.Worksheets["SHEET2"];            Excel.Range xlSheet2WorkSheetRange = xlSheet2WorkSheet.UsedRange;            int xlSheet2RowCount = xlSheet2WorkSheetRange.Rows.Count;            int xlSheet2ColCount = xlSheet2WorkSheetRange.Columns.Count;            List<ImportSheet1> Sheet1CombinedList = new List<ImportSheet1>();            List<ImportSheet2> Sheet2sCombinedList = new List<ImportSheet2>();            }            }我想知道如何更快地讀取這些行,并使用公共屬性信息和 ID 將這些工作表數據合并到一個列表中。
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

25K 行是一個很小的行數。Excel 每張工作表最多可容納 100 萬行。

延遲是由 Excel Interop 的使用造成的,而不是數據大小造成的?;ゲ僮髡{用實際上是對單獨進程的 COM 調用。每個這樣的調用都比訪問本地對象慢數百倍。該行xlSheet2WorkSheetRange.Rows.Count包含兩個跨進程調用,一個用于獲取對 Rows 集合的引用,另一個用于Count從中獲取屬性。與 相同xlSheet1Range.Cells[iRow, 3]

您可以使用ADO.NET和 Jet OLEDB 提供程序或本機 .NET 庫(如ExcelDataReader )。本機 .NET 解決方案的優點是您無需在客戶端計算機上安裝任何內容。

您可以使用ExcelDataReader將所有數據直接讀入數據集,每個工作表中的數據最終存儲在單獨的表中,例如:

using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))

{

? ? using (var reader = ExcelReaderFactory.CreateReader(stream))

? ? {

? ? ? ? var result = reader.AsDataSet();


? ? ? ? var table1=result.Tables["Sheet1"];

? ? ? ? foreach(DataRow in table1.Rows)

? ? ? ? {

? ? ? ? ? ?//Do something with the row

? ? ? ? }

? ? }

}? ??

將這些行轉換為強類型對象的一種簡單方法是使用LINQ To Dataset:


var query1 = from row in table1.AsEnumerable()

? ? ? ? ? ? select new ImportSheet1

? ? ? ? ? ? {

? ? ? ? ? ? ? ? Info = row.Field<string>(0),

? ? ? ? ? ? ? ? ID? ?= row.Field<int?>(1)??0,

? ? ? ? ? ? ? ? InfoDesc = row.Field<int?>(2)??0,

? ? ? ? ? ? ? ? DataType = row.Field<string>(3),

? ? ? ? ? ? ? ? RateFormat = row.Field<string>(4)? ??

? ? ? ? ? ? };

var Sheet1CombinedList =query.ToList();


查看完整回答
反對 回復 2023-08-20
  • 1 回答
  • 0 關注
  • 162 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號