如何将所有行转换为 txt 文件?
how can i convert all rows into txt file?
我已经有了从 .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
。
所以第一行是文件的header。
将其更改为 HDR=No
"HDR=Yes;" indicates that the first row contains columnnames, not
data. "HDR=No;" indicates the opposite.
参考link:excel connection
显然你的问题是你在 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);
}
}
}
}
}
我已经有了从 .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
。
所以第一行是文件的header。
将其更改为 HDR=No
"HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.
参考link:excel connection
显然你的问题是你在 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);
}
}
}
}
}