无Excel环境下服务器端CSV转Excel的实现问题求助
可行解决方案推荐
方案1:使用EPPlus(推荐,适配.NET/.NET Core)
EPPlus是开源的Excel操作类库,无需依赖本地Excel环境,能生成标准可正常打开的xlsx文件。
操作步骤:
- 安装EPPlus NuGet包:执行命令
Install-Package EPPlus,或通过NuGet包管理器可视化安装。 - 示例代码:
using OfficeOpenXml; using System.IO; string targetFileName = GenerateTargetFileName(sourceFileName); string sourcePath = Path.Combine(sourceloc, sourceFileName); string targetPath = Path.Combine(targetloc, targetFileName); // 设置EPPlus许可证(EPPlus 5及以上版本要求) ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 商用场景请改为LicenseContext.Commercial using (var package = new ExcelPackage()) { // 创建工作表 var worksheet = package.Workbook.Worksheets.Add("Sheet1"); // 读取CSV内容并写入Excel using (var reader = new StreamReader(sourcePath)) { int rowNum = 1; while (!reader.EndOfStream) { var line = reader.ReadLine(); // 若CSV存在带逗号的引号包裹字段,建议搭配CsvHelper库解析,避免手动分割出错 var cellValues = line.Split(','); for (int colNum = 0; colNum < cellValues.Length; colNum++) { worksheet.Cells[rowNum, colNum + 1].Value = cellValues[colNum]; } rowNum++; } } // 自动调整列宽 worksheet.Cells.AutoFitColumns(); // 保存生成的Excel文件 package.SaveAs(new FileInfo(targetPath)); }
方案2:使用NPOI(兼容.NET Framework和.NET Core)
NPOI是成熟的跨平台Office文件操作库,同样无需依赖Excel环境,支持多种Office格式。
操作步骤:
- 安装NPOI NuGet包:执行命令
Install-Package NPOI。 - 示例代码:
using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.IO; string targetFileName = GenerateTargetFileName(sourceFileName); string sourcePath = Path.Combine(sourceloc, sourceFileName); string targetPath = Path.Combine(targetloc, targetFileName); // 创建xlsx工作簿和工作表 IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("Sheet1"); // 读取CSV内容并写入Excel using (var reader = new StreamReader(sourcePath)) { int rowIndex = 0; while (!reader.EndOfStream) { var line = reader.ReadLine(); var cellValues = line.Split(','); IRow row = sheet.CreateRow(rowIndex); for (int colIndex = 0; colIndex < cellValues.Length; colIndex++) { row.CreateCell(colIndex).SetCellValue(cellValues[colIndex]); } rowIndex++; } } // 自动调整列宽 for (int i = 0; i < sheet.GetRow(0).LastCellNum; i++) { sheet.AutoSizeColumn(i); } // 保存文件 using (var fs = new FileStream(targetPath, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); }
关于Sylvan Data生成损坏文件的修复尝试
你之前的Sylvan Data代码可能缺少资源释放或刷新操作,导致文件写入不完整,可尝试修改为以下形式:
using (var csvreader = CsvDataReader.Create(sourcePath)) using (var excelwrite = ExcelDataWriter.Create(targetPath)) { excelwrite.Write(csvreader); excelwrite.Flush(); }
不过仍推荐前两种经过广泛验证的类库,稳定性和兼容性更有保障。
内容的提问来源于stack exchange,提问作者robC
相关产品推荐
相关产品推荐

