我有一個 .NET 應用程式,可以生成多個 CSV 檔案,例如
1.csv
2.csv
3.csv
.
.
.
我正在嘗試將它們轉換為單個 .xlsx 檔案,其中每個 CSV 的資料位于單獨的選項卡中。我遇到了一些可以讓我這樣做的 NuGet 包,但它們似乎都有相當昂貴的許可證。然后我發現Microsoft.Office.Interop.Excel,對于我的生活,我無法弄清楚。有沒有一種簡單的方法可以將多個 CSV 檔案合并到一個帶有多個選項卡的 MS Excel 檔案中?
uj5u.com熱心網友回復:
如果您沒有找到任何免費的軟體包,我發現 EPPlus 使用起來非常簡單。如果您想嘗試,他們有非商業許可證。對于商業應用程式,它是有代價的。
要制作標簽,ExcelPackage.Workbook.Worksheets.Add("Tab Name");您可以創建一個標簽,然后tab.Cells[row, colum].Value = "X"您可以輸入您需要的資訊。
uj5u.com熱心網友回復:
你不需要任何圖書館來做到這一點。CSV 檔案只是具有特定格式的文本檔案。您需要做的就是創建一個檔案并將其他檔案復制到其中:
很抱歉誤讀了這個問題。以下是 NPOI 庫使用示例:
var files = Directory.GetFiles(DownloadPath);
var combinedFile = Path.Combine(DownloadPath, "Combined.xlsx");
using var target = new FileStream(combinedFile, FileMode.Create, FileAccess.Write);
IWorkbook workbook = new XSSFWorkbook();
var seperator = ";";
foreach (var file in files)
{
ISheet sheet = workbook.CreateSheet(file);
using var sourceFile = new FileStream(file, FileMode.Open, FileAccess.Read);
using TextReader reader = new StreamReader(sourceFile);
var line = await reader.ReadLineAsync();
var i = 0;
while (!string.IsNullOrEmpty(line))
{
var row = sheet.CreateRow(i );
var values = line.Split(seperator);
for (int j = 0; j < values.Length; j )
{
var cell = row.CreateCell(j);
cell.SetCellValue(values[j]);
}
}
}
workbook.Write(target);
另請注意,這只是一個示例。您應該查看檔案以獲取詳細資訊。
uj5u.com熱心網友回復:
有多種方法可以做到這一點。一種方法是使用 Epplus 包。另一種是使用非常簡單的Interop.Excel。使用 Interop.Excel,您有更多機會(例如,您可以使用 Excel 創建插件等手動執行任何操作)。無論如何,使用 Interop.Excel,您可以使用 CopyFromRecordset(),如果您的檔案持久性是 QueryTables.Add(),則更好。這是使用 CopyFromRecordset 的示例:
using ADODB;
using Excel=Microsoft.Office.Interop.Excel;
void Main()
{
Excel.Application xl = new Excel.Application();
var wb = (Excel.Workbook)xl.Workbooks.Add();
//xl.Visible = true;
ConnectionClass cn = new ConnectionClass();
string path = @"c:\temp\myCSVFiles";
string[] filenames = { "1.csv", "2.csv", "3.csv", "4.csv" };
string connectionString = $@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=""text;HDR=Yes;FMT=Delimited"";";
cn.Open(connectionString, "", "", 0);
for (int i = 0; i < filenames.Length; i )
{
if (i > 0 && wb.Worksheets.Count < i 1) {
wb.Worksheets.Add(After: wb.Worksheets[i]);
}
var ws = (Excel.Worksheet)wb.Worksheets[i 1];
RecordsetClass rs = new RecordsetClass();
string filename = filenames[i];
rs.Open($@"select * from {filename}",
cn,
CursorTypeEnum.adOpenUnspecified,
LockTypeEnum.adLockUnspecified, 0);
ws.Activate();
Excel.Range rng = ws.Range["A1"];
for (int j = 0; j < rs.Fields.Count; j )
{
rng.Offset[0, j].Value2 = rs.Fields[j].Name;
rng.Offset[0, j].Font.Bold = true;
}
rng.Offset[1, 0].CopyFromRecordset(rs);
ws.UsedRange.Columns.AutoFit();
rs.Close();
}
cn.Close();
wb.SaveAs(@"c:\temp\MyCSVStore.xlsx");
wb.Close(SaveChanges:true);
xl.Quit();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424353.html
