2012-08-15 69 views

回答

3

您可以讀取XLS通過OLEDB(ADO.NET提供者)容易文件並創建一個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]); 
         } 
        } 
       } 
      } 
     } 
+0

還有其他的手段來讀取可能提供更好的性能,從Infragistics的,GebBox,或像NPOI開源產品商業庫的Excel文件 - 爲不同的閱讀選項的討論,請參見http://stackoverflow.com/questions/15828 /讀Excel的文件 - 從-C-尖銳 – 2012-08-15 11:07:16

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的實例保持打開狀態。解決這個問題的方法是通過程序手動殺死進程,但是我會將其保存爲不同的討論。

相關問題