C# 我正在读取CSV文件,并得到一个列超出范围错误
我目前正在使用EPPlus库,我正在尝试从目录中读取csv文件。我正在查找文件并尝试将其保存为Excel,但在尝试保存时,出现异常C# 我正在读取CSV文件,并得到一个列超出范围错误,c#,excel,epplus,C#,Excel,Epplus,我目前正在使用EPPlus库,我正在尝试从目录中读取csv文件。我正在查找文件并尝试将其保存为Excel,但在尝试保存时,出现异常列超出范围 string csvPath = path; string expath = "C:\\Users\\er4505\\Desktop\\Test CSV File"; string exWorksheet = "Test99999"; bool firstRowIsHeader = false;
列超出范围
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代码,因此可以下载它并调试您的问题。您提到的错误消息在第144行中使用。您能否提供有关输入文件的更多信息,以便人们可以重现您的步骤?我在控制台应用程序中复制了代码,将“Test CSV file”重命名为“Test CSV file.XLSX”,并使用NuGet下载EPPlus 4.0.5。然后我制作了一个包含三行两列的CSV文件:
Column1,Column2
1,2
a,b
运行代码后,将保存文件,您可以在Excel中打开输出文件。删除输入文件中的“XLSX”扩展名或“2”不会产生您提到的错误。您可以找到EPPlus代码,因此可以下载它并调试您的问题。您提到的错误消息在第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);
}
}
List QueryResult=PMService.getRequestedEngaments(测试);
var filename=您的文件名;
var path=@“C:\Users\er4505\Downloads”+文件名;
var excelFileInfo=新文件信息(路径);
尝试
{
使用(ExcelPackage csvToExcel=new ExcelPackage())
{
Excel工作表工作表=csvToExcel.Workbook.Worksheets.Add(文件名);
worksheet.Cells[“A1”].LoadFromCollection(QueryResult,true,OfficeOpenXml.Table.TableStyles.Medium25);
csvToExcel.SaveAs(excelFileInfo);
}
}
好的,昨晚大家都在浏览这个库的所有文档。此库能够接收列表而不使用逗号分隔对其进行格式化。我只是简单地传递了我的查询结果列表,其余的由库完成
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);
}
}
List QueryResult=PMService.getRequestedEngaments(测试);
var filename=您的文件名;
var path=@“C:\Users\er4505\Downloads”+文件名;
var excelFileInfo=新文件信息(路径);
尝试
{
使用(ExcelPackage csvToExcel=new ExcelPackage())
{
Excel工作表工作表=csvToExcel.Workbook.Worksheets.Add(文件名);
worksheet.Cells[“A1”].LoadFromCollection(QueryResult,true,OfficeOpenXml.Table.TableStyles.Medium25);
csvToExcel.SaveAs(excelFileInfo);
}
}
我发现,问题出在我的.csv文件中
EPPlus库读取文件并将其拆分为字符串数组。分隔符模式为“\r\n”。
但是我的.csv文件在每行末尾只有“\n”符号
这就是为什么EPPlus认为my.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);
}
我发现,这个问题出现在我的.csv文件中
EPPlus库读取文件并将其拆分为字符串数组。分隔符模式为“\r\n”。
但是我的.csv文件在每行末尾只有“\n”符号
这就是为什么EPPlus认为my.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);
}
您将文件从.csv
重命名为.xlsx
?或者您将其保存为.xlsx
格式?我更改了expath赋值中字符串的最后一部分。可能是原问题的错别字是的,我变得很沮丧。看起来我是在尝试手动完成所有的工作。其中,该库能够从查询搜索中恢复列表或数组,并动态生成excel文件。请在下面查看答案您是否将文件从.csv
重命名为.xlsx
?或者您将其保存为.xlsx
格式?我更改了expath赋值中字符串的最后一部分。可能是原问题的错别字是的,我变得很沮丧。看起来我是在尝试手动完成所有的工作。其中,该库能够从查询搜索中恢复列表或数组,并动态生成excel文件。请查看下面的答案。我正在创建CSV字符串并将其传递到此库中。很抱歉,我确实透露了这一点,请查看下面我的回答。我正在创建一个CSV字符串并将其传递到此库中。对不起,我没有透露,请查看下面我的答案