我可以使用 C# 以某种方式将 Excel .XLS 文件转换为 txt-tsv(制表符分隔值)文件吗?
问问题
9970 次
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();
没有循环,没有bs。只需复制、粘贴和更改文件名。我看到的唯一问题是有时 myExcel.Quit() 似乎无法正常工作,并且 excel 的实例在后台保持打开状态。解决这个问题的方法是通过您的程序手动终止该进程,但我将把它留到另一个讨论中。
于 2015-12-15T22:34:24.563 回答
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]);
}
}
}
}
}
于 2012-08-15T08:19:47.807 回答
0
在此处查看相关问题的答案。在具有 的行上ws.SaveAs(targetFilePath, XlFileFormat.xlCSV);
,替换xlCSV
为xlUnicodeText
。
于 2019-08-20T15:29:36.427 回答