Convertire .XLS nella scheda separata .TXT

Posso in qualche modo convertire il file Excel .XLS in file txt-tsv (valori separati da tabulazione), utilizzando C #?

È ansible leggere facilmente il file XLS tramite OleDb (provider ADO.NET) e creare un object StreamWriter per scrivere i dati nel file 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]); } } } } } 

L'utilizzo di OleDb può essere difficile e può causare problemi a seconda della versione di excel che il foglio di calcolo è stato creato. Ad esempio l'esempio precedente functionrebbe con .xls, ma non con .xlsx. Dovresti cambiare la string di connessione da "Microsoft.Jet.OLEDB.4.0" a "Microsoft.ACE.OLEDB.12.0" per compensare. Tuttavia, non sarebbe ancora universale a tutti i fogli excel. Vorrei utilizzare Microsoft.Office.Interop.Excel come segue

 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(); 

Nessun loop, no bs. Basta copiare, incollare e modificare i nomi dei file. L'unico problema che ho visto è a volte che myExcel.Quit () non sembra funzionare correttamente e le istanze di excel restano aperte lo background. Il modo in cui è questo è quello di uccidere il process manualmente dal tuo programma, ma lo risparmierò per una discussione diversa.