将XLS文件转换为CSV的程序,运行时不创建文件

问题描述 投票:0回答:1

我正在Visual Studio 2019社区版中构建一个应用程序,以将Excel XLS文件转换为CSV。我找到了一些使用ExcelReader库的示例代码,并对其进行了修改,以便将XLS文件提取为test.csv文件。运行此程序时,我没有收到任何错误,但未创建文件。

这是为了帮助实现当前手动过程的自动化,我们必须手动打开XLS文件并将其另存为CSV。我正在使用Visual Studio Community Edition(2019),并添加了ExcelReader库。

'''public partial class Default2 : System.Web.UI.Page
{
    static void Main() { }
    DataSet result = new DataSet();
    string filePath = 
@"C:\Users\BEM26331\Documents\AppDevProjects\9.10.19.xls";

    protected void UploadButton_Click(object sender, EventArgs e)
    {
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        FileStream stream = File.Open(filePath, FileMode.Open, 
FileAccess.Read);

        Excel.IExcelDataReader excelReader = 
Excel.ExcelReaderFactory.CreateBinaryReader(stream);
        DataSet result = excelReader.AsDataSet();
        excelReader.Close();

        result.Tables[0].TableName.ToString();

        string csvData = "";
        int row_no = 0;
        int ind = 0;

        while (row_no < result.Tables[ind].Rows.Count)
        {
            for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
            {
                csvData += result.Tables[ind].Rows[row_no][i].ToString() 
+ ",";
            }
            row_no++;
            csvData += "\n";
        }

        string output = 
@"C:\Users\BEM26331\Documents\AppDevProjects\test.csv";
        StreamWriter csv = new StreamWriter(@output, false);
        csv.Write(csvData);
        csv.Close();
    }
}'''

最终结果应创建相同的文件,但另存为CSV。实际输出不会创建任何文件。

c# csv xls excel-reader
1个回答
1
投票

也许是这样?:

    public void ConvertToCSV(string sourceFile, string targetFile)
            {
                using (var stream = System.IO.File.Open(sourceFile, System.IO.FileMode.Open, System.IO.FileAccess.Read))
                {
                    //add ExcelDataReader and ExcelDataReader.DataSet
                    //Reading from a OpenXml Excel file (2007 format; *.xlsx)
                    using (var reader = ExcelDataReader.ExcelReaderFactory.CreateOpenXmlReader(stream))
                    {
                        //DataSet result = reader.AsDataSet();
                        DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
                        {
                            ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
                        });
                        if (result.Tables.Count > 0)
                        {
                                System.Text.StringBuilder output = new StringBuilder();
                            DataTable table = result.Tables[0];
                            //save column names
                            output.AppendLine(String.Join(",", table.Columns.Cast<System.Data.DataColumn>().ToList()));
                            //save all rows
                            foreach (System.Data.DataRow dr in table.Rows)
                            {
                                output.AppendLine(String.Join(",", dr.ItemArray.Select(f=>f.ToString() ).ToList()   ) );
                            }
                            System.IO.File.WriteAllText(targetFile, output.ToString());
                        }
                    }
                }
            }
© www.soinside.com 2019 - 2024. All rights reserved.