我正在读取 CSV 文件并收到列超出范围错误
I am reading in a CSV file and getting a Column out of range error
我目前正在使用 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();
}
}
我复制了控制台应用程序中的代码,将 "Test CSV File" 重命名为 "Test CSV File.XLSX" 并使用 NuGet 下载了 EPPlus 4.0.5。然后我制作了一个三行两列的CSV文件:
Column1,Column2
1,2
a,b
在 运行 代码后文件被保存,您可以在 Excel 中打开输出文件。删除输入文件中的 "XLSX" 扩展名或“2”不会产生您提到的错误。您可以找到 EPPlus 代码 here, so it is possible to download it and debug your problem. The error message you mentioned is used in ExcelRange.cs,第 144 行。您能否提供有关输入文件的更多信息,以便人们可以重现您的步骤?
好吧,大家昨晚花了很多时间浏览了这个库的所有文档。该库能够接收列表而不用逗号分隔对其进行格式化。我只是简单地传递了我的查询结果列表,剩下的就交给图书馆了。
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);
}
}
我发现问题出在我的 .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);
}
我目前正在使用 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();
}
}
我复制了控制台应用程序中的代码,将 "Test CSV File" 重命名为 "Test CSV File.XLSX" 并使用 NuGet 下载了 EPPlus 4.0.5。然后我制作了一个三行两列的CSV文件:
Column1,Column2
1,2
a,b
在 运行 代码后文件被保存,您可以在 Excel 中打开输出文件。删除输入文件中的 "XLSX" 扩展名或“2”不会产生您提到的错误。您可以找到 EPPlus 代码 here, so it is possible to download it and debug your problem. The error message you mentioned is used in ExcelRange.cs,第 144 行。您能否提供有关输入文件的更多信息,以便人们可以重现您的步骤?
好吧,大家昨晚花了很多时间浏览了这个库的所有文档。该库能够接收列表而不用逗号分隔对其进行格式化。我只是简单地传递了我的查询结果列表,剩下的就交给图书馆了。
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);
}
}
我发现问题出在我的 .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);
}