【问题标题】:Converting XLSX file using to a CSV file将 XLSX 文件转换为 CSV 文件
【发布时间】:2017-03-21 12:07:38
【问题描述】:

我需要将一个 XLSX 文件转换为另一个 CSV 文件。 我已经对如何执行此过程进行了大量研究,但我没有找到适合我的任何东西。 我只发现了这个 Github Gist Convert an Epplus ExcelPackage to a CSV file

返回一个二进制数组。但显然它不再起作用了。

我正在尝试使用 LoadFromCollection 加载数组

    FileInfo novoArquivoCSV = new FileInfo(fbd.SelectedPath);
    var fileInfoCSV = new FileInfo(novoArquivo + "\\" +
                                 nameFile.ToString() + ".csv");


            using (var csv = new ExcelPackage(fileInfoCSV))
        {
            csv.Workbook.Worksheets.Add(nameFile.ToString());
            var worksheetCSV = csv.Workbook.Worksheets[1];

            worksheetCSV.Cells.LoadFromCollection(xlsx.ConvertToCsv());

        }

【问题讨论】:

  • 第 1 步:重命名变量。你和我只会对此感到困惑。如果xls 实际上是filename,那么就这样命名。如果xls 是文件名,那么nameFile 是什么?顺便说一句:csv 不是 CSV 文件,它是一个 EPPlus Excel 包。这也有错误的变量名。
  • 无论xls 是什么,worksheetCSV.Cells.LoadFromCollection 都会创建一个 XLSX 文件。 为什么您还是要将xlsx 转换为 CSV? XLSX 只是一个 XML 文件的压缩包,任何程序或语言都可以毫无问题地使用它。您不需要 Excel 来阅读或创建它。 CSV 虽然在日期、数字和分隔符格式方面存在问题
  • 是的,我知道。但是,我需要将 .csv 文件导入 SQL DTO 2000,不幸的是我只能使用 .csv 文件,因此创建了项目。 ://
  • SQL Server 支持的最早版本是 2012。你真的要使用 SQL Server 2000 吗?????
  • 无论如何,只需用 EPPlus 加载 XLSX,循环 Cells 并将它们写出来。您链接到的要点有什么问题?

标签: c# csv export-to-csv epplus


【解决方案1】:

您链接到的代码读取 XLSX 表并通过内存流将 CSV 数据作为字节缓冲区返回。

如果您删除内存流并将路径传递给 ConvertToCsv 中的目标文件,则可以直接写入文件:

public static void ConvertToCsv(this ExcelPackage package, string targetFile)
{
        var worksheet = package.Workbook.Worksheets[1];

        var maxColumnNumber = worksheet.Dimension.End.Column;
        var currentRow = new List<string>(maxColumnNumber);
        var totalRowCount = worksheet.Dimension.End.Row;
        var currentRowNum = 1;

        //No need for a memory buffer, writing directly to a file
        //var memory = new MemoryStream();

        using (var writer = new StreamWriter(targetFile,false, Encoding.UTF8))
        {
        //the rest of the code remains the same
        }

        // No buffer returned
        //return memory.ToArray();
}

Encoding.UTF8 确保文件将被写入为带有字节顺序标记的 UTF8,允许所有程序理解这是一个 UTF8 文件而不是 ASCII。否则,程序可能会以 ASCII 格式读取文件,并在遇到第一个非 ASCII 字符时阻塞。

【讨论】:

  • 这也适用于我,请注意当前代码是指 github 代码。我需要将这些类集成到我的项目中,但经过 2 小时的工作,我让它运行良好!
【解决方案2】:

签出 Excel 对象中的 .SaveAs() 方法。

wbWorkbook.SaveAs("c:\yourdesiredFilename.csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV)

或以下:

public static void SaveAs()
{
    Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
    Microsoft.Office.Interop.Excel.Workbook wbWorkbook = app.Workbooks.Add(Type.Missing);
    Microsoft.Office.Interop.Excel.Sheets wsSheet = wbWorkbook.Worksheets;
    Microsoft.Office.Interop.Excel.Worksheet CurSheet = (Microsoft.Office.Interop.Excel.Worksheet)wsSheet[1];

    Microsoft.Office.Interop.Excel.Range thisCell = (Microsoft.Office.Interop.Excel.Range)CurSheet.Cells[1, 1];

    thisCell.Value2 = "This is a test.";

    wbWorkbook.SaveAs(@"c:\one.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    wbWorkbook.SaveAs(@"c:\two.csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    wbWorkbook.Close(false, "", true);
}

Is there any simple way to convert .xls file to .csv file? (Excel)

还有其他一些在线资源可以帮助解决这个问题。实际上,对于像这样的通用问题,您应该始终谷歌寻找解决方案,并尝试自己弄清楚。这是学习如何做技术事情的最好方法。如果您遇到困难,或者您有一个非常具体的问题,这个网站是发布您的问题的好地方。在我看来,您可能从这里开始,并且您自己没有做任何前期工作。

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 2018-07-22
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多