将 .XLS 文件转换为制表符分隔的 .TXT 文件

4
我能够帮您将Excel .XLS文件转换为txt-tsv(制表符分隔值)文件,使用C#编程语言来实现。以下是代码示例:
3个回答

6
使用OleDb可能会很棘手,并且根据电子表格创建的Excel版本不同而导致问题。例如,上面的例子可以使用.xls工作,但不能使用.xlsx。您需要将连接字符串从“Microsoft.Jet.OLEDB.4.0”更改为“Microsoft.ACE.OLEDB.12.0”来进行补偿。然而,这仍然不能适用于所有excel表格。我会像下面这样使用Microsoft.Office.Interop.Excel。
Microsoft.Office.Interop.Excel.Application myExcel;
Microsoft.Office.Interop.Excel.Workbook myWorkbook;
Microsoft.Office.Interop.Excel.Worksheet worksheet;

myExcel = new Microsoft.Office.Interop.Excel.Application();
myExcel.Workbooks.Open(inputFileName.xls, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
myWorkbook = myExcel.ActiveWorkbook;
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkbook.Worksheets[1];
myWorkbook.SaveAs(outputFileName.txt, Microsoft.Office.Interop.Excel.XlFileFormat.xlTextWindows, Missing.Value, Missing.Value, Missing.Value, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

myWorkbook.Close(false, Missing.Value, Missing.Value);
myExcel.Quit();

无需循环,不废话。只需复制、粘贴并更改文件名即可。我遇到的唯一问题是有时myExcel.Quit()似乎不能正确工作,导致Excel实例在后台保持打开状态。解决方法是通过程序手动终止该进程,但这将留给另一个讨论。


3

您可以通过 OleDb(ADO.NET 提供程序)轻松地读取 XLS 文件,并创建一个 StreamWriter 对象将数据写入文本 / TSV 文件。

using (OleDbConnection cn = new OleDbConnection())
        {
            using (OleDbCommand cmd = new OleDbCommand())
            {
                cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"C:\path\file.xls" + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";
                cmd.Connection = cn;
                cmd.CommandText = "select * from [Sheet1$]";
                using (OleDbDataAdapter adp = new OleDbDataAdapter(cmd))
                {
                    DataTable dt = new DataTable();
                    adp.Fill(dt);
                    using (StreamWriter wr = new StreamWriter(@"C:\path\flie.tsv"))
                    {
                        foreach (DataRow row in dt.Rows)
                        {
                            wr.WriteLine(row[0] + "\t" + row[1]);
                        }
                    }
                }
            }
        }

有其他方法可以读取Excel文件,这些方法可能提供更好的性能,包括来自Infragistics、GebBox等商业库或开源选项,如Npoi。有关各种读取选项的讨论,请参见https://dev59.com/-nVD5IYBdhLWcg3wVJ8b。 - David Burton

0

请参考相关问题的答案这里。在包含ws.SaveAs(targetFilePath, XlFileFormat.xlCSV);的那一行中,将xlCSV替换为xlUnicodeText


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接