長話短說,我正在嘗試將來自 3 個不同 Excel 檔案的資料轉換為 5 個單獨的 CSV 檔案,使用所有這些檔案的資料組合來完成。3 個檔案中的 2 個沒有問題,但其中一個檔案包含的資料略有不同 - 雖然總共使用了 9 列(41,730 行),但只有 3-5 列的每一行都有資料,而不是第一行(標題行)。問題在于它實際上什至不包括沒有資料的列......因此將所有資料放入陣列串列中在各個陣列中具有不同數量的段(因此我無法正確關聯資料) .
這是我正在運行的代碼:
using (ExcelPackage xlPackage = new ExcelPackage(new System.IO.FileInfo(strInputFile)))
{
ExcelWorksheet myWorksheet = xlPackage.Workbook.Worksheets.First();
int totalRows = myWorksheet.Dimension.End.Row;
int totalColumns = myWorksheet.Dimension.End.Column;
for (int rowNum = 1; rowNum <= totalRows; rowNum )
{
var row = myWorksheet.Cells[rowNum, 1, rowNum, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());
listOutput.Add(string.Join("~", row).Split('~'));
}
}
這對其他人來說非常有效,但在這個檔案中,第一行有 9 個段,然后每一行有 3-5 個,具體取決于有多少列有值(前 2 列總是有值,然后 1-2 列將在每一行)。其他檔案用空字串填充空白列,使用 Select 中的 lambda,但我不知道為什么它不在這個檔案中這樣做。所有 3 個都來自相同的來源(客戶端環境匯出),并且具有相同的格式。
uj5u.com熱心網友回復:
很可能myWorksheet.Cells[rowNum, 1, rowNum, totalColumns]只是不回傳沒有值的單元格。嘗試這樣的事情:
var row = Enumerable.Range(1, totalColumns)
.Select(columnNum => myWorksheet.Cells[rowNum, columnNum])
.Select(c => c?.Value?.ToString() ?? string.Empty);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537950.html
標籤:C#擅长艾普拉斯
下一篇:Helm入口控制器不添加路徑
