我怎样才能将所有行转换为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); } } } } }