3

C#を使用して、Excelの.XLSファイルをtxt-tsv(tab-separated-values)ファイルに変換できますか?

4

3 に答える 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

そのXLSファイルはOleDb(ADO.NETプロバイダー)を介して簡単に読み取ることができ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 に答える