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

时间:2012-08-15 08:12:57

标签: c# excel tsv

我可以使用C#以某种方式将Excel .XLS文件转换为txt-tsv(制表符分隔值)文件吗?

3 个答案:

答案 0 :(得分: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();

没有循环,没有bs。只需复制,粘贴和更改文件名即可。我看到的唯一问题是有时myExcel.Quit()似乎没有正常工作,excel的实例保持打开我的背景。解决这个问题的方法是通过程序手动终止进程,但我会将其保存为不同的讨论。

答案 1 :(得分:3)

您可以通过OleDb(ADO.NET提供程序)轻松读取该XLS文件,并创建一个StreamWriter对象以将数据写入Text / 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]);
                        }
                    }
                }
            }
        }

答案 2 :(得分:0)

请参阅相关问题here的答案。在具有ws.SaveAs(targetFilePath, XlFileFormat.xlCSV);的行上,将xlCSV替换为xlUnicodeText