簡體   English   中英

(C#)OpenXML使用正確的列數據類型將xlsx導入DataTable

[英](C#) OpenXML import xlsx into DataTable with correct column data type

我正在使用OpenXML庫使用C#將excelsheet(.xslx)導入到DataTable中。

xlsx的第一行包含列名稱,因此我開始在DataTable中添加該列:

foreach (Cell cell in row.Descendants<Cell>())
{
    dt.Columns.Add(GetXlsxCellValue(sharedStringTableList, cell));
}

然后,我循環所有其他行,並通過以與當前行中任何單元格相似的方式將任何一行添加到我的DataTable中來填充DataTable。

現在,假設我的excel有兩個這樣的列

excel示例

第一行包含列名,因此第一單元格的DataType =字符串(文本存儲在sharedStringTableList中)。

所有其他行在第一列中僅包含Number(在excel中,整列也將其格式設置為“ number”)。

最后,在我的DataTable中,第一列具有正確的名稱(“ Number”),但DataType列為STRING

問題:如何使用開頭在xlsx中設置的正確列DataType創建我的DataTable? 方法“ Columns.Add()”允許您指定列dataType,但是在第一行中所有單元格都具有DataType = string,因此我需要以其他方式檢查列DataType。

提前致謝,

安德里亞

...

好了,您將必須確定單元格類型,然后基於該單元格創建列。 嘗試看看這篇文章。 之后,您應該能夠根據單元格類型創建列 (將其轉換為.NET類型之后)。 但是,如果您知道高級的類型,並且希望將數據作為T的列表,則建議您查看ClassToExcel.OpenXml之類的東西或類似的包裝器庫,從而省去編寫代碼的麻煩。

有一個名為ClosedXML的庫,它是OpenXML的友好包裝器,我發現它比直接的OpenXML易於使用。 有一個Enum(XLCellValues)告訴您什么是excel數據類型。 這可以用來幫助您構建正確的數據列類型。

是一個示例,說明如何使用封閉的xml將行和列導航和解析為一個簡單的類,與您的示例非常相似(但適用於類而不是數據表)。 在該鏈接/示例中,還有一種方法可以將C#尖銳類型映射到可以反向使用的excel列類型(XLCellValues枚舉)。 如果您不信任給定的excel數據類型,它將變得更加復雜。

如果您有一個簡單的目標類,則嘗試從excel中提取該nuget可以直接使用,但我認為您需要DataTable輸出。

希望這可以幫助。

您必須查看以下內容,才能將整個列數據類型設置為text:

Worksheet.Column(9).Style.NumberFormat.Format = "@";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM