我目前正在使用EPPlus库,我正在尝试从目录中读取csv文件。我找到该文件并尝试将其保存为Excel但我在尝试保存时遇到异常Column out of range
。
string csvPath = path;
string expath = "C:\\Users\\er4505\\Desktop\\Test CSV File";
string exWorksheet = "Test99999";
bool firstRowIsHeader = false;
var xformat = new ExcelTextFormat();
xformat.Delimiter = ',';
var excelInfo = new FileInfo(expath);
var csvFileInfo = new FileInfo(csvPath);
try {
using (ExcelPackage csvToExcel = new ExcelPackage(excelInfo))
{
ExcelWorksheet worksheet = csvToExcel.Workbook.Worksheets.Add(exWorksheet);
worksheet.Cells["A1"].LoadFromText(csvFileInfo,xformat,OfficeOpenXml.Table.TableStyles.Medium25, firstRowIsHeader);
csvToExcel.Save();
}
}
答案 0 :(得分:0)
我将代码复制到控制台应用程序中,将“Test CSV File”重命名为“Test CSV File.XLSX”,并使用NuGet下载EPPlus 4.0.5。然后我制作了一个包含三行两列的CSV文件:
Column1,Column2
1,2
a,b
运行代码后,文件将被保存,您可以在Excel中打开输出文件。删除输入文件中的“XLSX”扩展名或“2”不会产生您提到的错误。您可以找到EPPlus代码here,因此可以下载并调试您的问题。您提到的错误消息在ExcelRange.cs第144行中使用。您能否提供有关输入文件的更多信息,以便人们可以重现您的步骤?
答案 1 :(得分:0)
好的家伙昨晚花了这个库的所有文档。此库能够接收列表,但不能使用逗号分隔格式化它。我只是传入了我的查询结果列表,其余的文库就完成了。
List<Engagement> QueryResult = PMService.GetRequestedEngagments(test);
var filename = yourfilename;
var path = @"C:\Users\er4505\Downloads" + filename;
var excelFileInfo = new FileInfo(path);
try
{
using (ExcelPackage csvToExcel = new ExcelPackage())
{
ExcelWorksheet worksheet = csvToExcel.Workbook.Worksheets.Add(filename);
worksheet.Cells["A1"].LoadFromCollection(QueryResult, true, OfficeOpenXml.Table.TableStyles.Medium25);
csvToExcel.SaveAs(excelFileInfo);
}
}
答案 2 :(得分:0)
我发现,问题出在我的.csv文件中。
EPPlus库读取文件并将其拆分为字符串数组。分隔符模式为“ \ r \ n”。 但是我的.csv文件每行的末尾只有'\ n'符号。
这就是为什么EPPlus认为我的.csv中没有行,但是它的列太多(官方列限制为16384)。
解决方案:
var text = File.ReadAllText(@"D:\example.csv");
ExcelTextFormat format = new ExcelTextFormat();
format.Delimiter = ';';
format.Culture = new CultureInfo(Thread.CurrentThread.CurrentCulture.ToString());
format.Culture.DateTimeFormat.ShortDatePattern = "dd.mm.yyyy";
format.Encoding = new UTF8Encoding();
//Replacing current "\n" NewLine symbol to "\r\n"
text = text.Replace("\n", "\r\n");
using (ExcelPackage excelPackage = new ExcelPackage())
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet 1");
worksheet.Cells[1, 1].LoadFromText(text, format);
}