我怎样才能将所有行转换为txt文件?
我已经有了从.xls到.txt的转换代码。 但问题是,它只输出一行,并停止。 我需要添加代码来读取所有行并将其转换为txt文件?
这里是我的代码如下:
using (OleDbConnection cn = new OleDbConnection()) { using (OleDbCommand cmd = new OleDbCommand()) { cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"C:\Users\jediablaza\Documents\EDIExcel\EDIExcel.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:\Users\jediablaza\Documents\EDIExcel\EDIExcel.txt")) { foreach (DataRow row in dt.Rows) { wr.WriteLine(row[0] + "\t" + row[1] + "\t" + row[2] + "\t" + row[3] + "\t" + row[4]); } } } } }
文本的输出如下所示
SHARPDTL TESTDTL1 TESTDTL2 TESTDTL3 TESTDTL4
但是excel文件的内容是
SHARPHDR1 TESTDHR1 TESTHDR2 TESTHDR3 TESTHDR4 SHARPDTL TESTDTL1 TESTDTL2 TESTDTL3 TESTDTL4
我认为问题是在您的连接属性: HDR=Yes
。
所以第一行是文件头。 将其更改为HDR=No
“HDR =是;” 表示第一行包含列名,而不是数据。 “HDR =无;” 表明相反。
参考链接: excel连接
显然你的问题是你在foreach
循环中使用固定的索引。
我试图修复你的代码在下一个块,我不能保证它会运行,因为它是在我的手机上,使用它只作为参考。
using (OleDbConnection cn = new OleDbConnection()) { using (OleDbCommand cmd = new OleDbCommand()) { cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"C:\Users\jediablaza\Documents\EDIExcel\EDIExcel.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:\Users\jediablaza\Documents\EDIExcel\EDIExcel.txt")) { foreach (DataRow row in dt.Rows) { var strBldr = new StringBuilder(); foreach (var col in row.Columns) { strBldr.Append("{col}\t"); } wr.WriteLine(strBldr); } } } } }