C# 我正在读取CSV文件,并得到一个列超出范围错误

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;

我目前正在使用EPPlus库,我正在尝试从目录中读取csv文件。我正在查找文件并尝试将其保存为Excel,但在尝试保存时,出现异常
列超出范围

    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字符串并将其传递到此库中。对不起,我没有透露,请查看下面我的答案