Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将所有行转换为txt文件?_C#_Excel_Oledb_Oledbconnection - Fatal编程技术网

C# 如何将所有行转换为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

我已经有了从.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=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;”表示相反的情况。