C# 如何将所有行转换为txt文件?
我已经有了从.xls转换到.txt的代码。但问题是,它只导出一行,然后停止。要让代码读取所有行并将其转换为txt文件,我需要添加什么 下面是我的代码:C# 如何将所有行转换为txt文件?,c#,excel,oledb,oledbconnection,C#,Excel,Oledb,Oledbconnection,我已经有了从.xls转换到.txt的代码。但问题是,它只导出一行,然后停止。要让代码读取所有行并将其转换为txt文件,我需要添加什么 下面是我的代码: using (OleDbConnection cn = new OleDbConnection()) { using (OleDbCommand cmd = new OleDbCommand()) { cn.ConnectionString = @"P
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=Yes;”表示第一行包含列名,而不是列名
数据“HDR=No;”表示相反的情况
参考链接:我认为问题在于您的连接属性:
HDR=Yes
所以第一行是文件的头。
将其更改为HDR=No
“HDR=Yes;”表示第一行包含列名,而不是列名
数据“HDR=No;”表示相反的情况
参考链接:显然,您的问题是在
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);
}
}
}
}
}
显然,您的问题是在
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);
}
}
}
}
}
为什么要对
行使用固定索引?
?嗨@Albertoestrela,我怎样才能使它在循环中?我不知道为什么你要对行使用固定索引
?嗨@Albertoestrela,我怎么能让它在循环中?我是新来的我对一些东西感到困惑,我意识到你只有5列,这就是为什么你要引用为固定索引,我的答案中的改进只是为了有动态列大小。我对一些东西感到困惑,我意识到你只有5列,这就是为什么你要引用为固定索引,我的答案中的改进只是为了增加动态列的大小。@jedablaza这似乎就是答案,请查看此链接并提供更多信息:。可能尝试使用源文件中的更多行时,您会注意到第一行被跳过。“HDR=Yes;”表示第一行包含列名,而不是数据。“HDR=No;”表示相反。@JediAblaza这似乎是答案,请查看此链接,了解更多信息:。可能尝试使用源文件中的更多行时,您会注意到第一行被跳过。“HDR=Yes;”表示第一行包含列名,而不是数据。“HDR=No;”表示相反的情况。