第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用 C# 將大型多個(gè) Excel 工作表中的數(shù)據(jù)讀取到列表中

如何使用 C# 將大型多個(gè) Excel 工作表中的數(shù)據(jù)讀取到列表中

C#
HUX布斯 2023-08-20 14:46:13
我在一個(gè) Excel 文件中有兩個(gè)大型數(shù)據(jù)工作表(25k 行)。工作表數(shù)據(jù)采用以下格式。表1:資訊| 身份證 | 信息描述| 信息類型 | 數(shù)據(jù)類型| 費(fèi)率格式25 | 25 5 | 費(fèi)用| 薪資| 數(shù)字| $$$.$$250 | 250 2 | 膳食| 午餐| 數(shù)字| $$$$.$$350 | 350 25 | 25 詳情 | 更多詳情 | 文本375 | 375 25 | 25 測(cè)試| | 12345 | 文本表2:資訊| 身份證 | 證書編號(hào) | 證書值25 | 5 | 2500 | 25000.00250 | 20 | 2222 | 5200.05350 | 25 | 32156 | 2500375 | 25 | 12564 | 25.00我試圖 1) 將行讀入兩個(gè)單獨(dú)的列表,2) 使用兩個(gè)工作表上的公共屬性(信息和 ID)將數(shù)據(jù)合并到一個(gè)公共列表中。3)檢查/驗(yàn)證每行數(shù)據(jù)。例如,檢查是否有任何數(shù)據(jù)類型不正確或?yàn)榭?。我嘗試將行讀取到單獨(dú)的列表中,但完成閱讀第一個(gè)工作表本身需要更長的時(shí)間。請(qǐng)協(xié)助了解如何有效地將這些工作表數(shù)據(jù)讀取到一個(gè)列表中并驗(yàn)證每個(gè)列值。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 將這些工作表數(shù)據(jù)合并到一個(gè)列表中。
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

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

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

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

您可以使用ExcelDataReader將所有數(shù)據(jù)直接讀入數(shù)據(jù)集,每個(gè)工作表中的數(shù)據(jù)最終存儲(chǔ)在單獨(dú)的表中,例如:

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

? ? ? ? }

? ? }

}? ??

將這些行轉(zhuǎn)換為強(qiáng)類型對(duì)象的一種簡單方法是使用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();


查看完整回答
反對(duì) 回復(fù) 2023-08-20
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)