C# C microsoft excel 2003移动工作表

C# C microsoft excel 2003移动工作表,c#,excel,ssis,C#,Excel,Ssis,我正在执行SSIS包C脚本任务,并且正在将.xls文件转换为.csv文件,我遇到了这样一个问题,即只编写了一张工作表 string fileFullPath = ""; //Get one Book(Excel file at a time) foreach (FileInfo file in files) { string filename = ""; fileFullPath = SourceF

我正在执行SSIS包C脚本任务,并且正在将.xls文件转换为.csv文件,我遇到了这样一个问题,即只编写了一张工作表

string fileFullPath = "";

        //Get one Book(Excel file at a time)
        foreach (FileInfo file in files)
        {
            string filename = "";
            fileFullPath = SourceFolderPath + "\\" + file.Name;
            filename = file.Name.Replace(".xls", "");
            //MessageBox.Show(fileFullPath);

            //Create Excel Connection
            string ConStr;
            string HDR;
            HDR = "YES";
            ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileFullPath + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=1\"";
            OleDbConnection cnn = new OleDbConnection(ConStr);
            bool isDouble;
            double dbl;


            //Get Sheet Name
            cnn.Open();
            DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string sheetname;
            sheetname = "";
            foreach (DataRow drSheet in dtSheet.Rows)
            {
                if (drSheet["TABLE_NAME"].ToString().Contains("$"))
                {
                    sheetname = drSheet["TABLE_NAME"].ToString();
                    //Display Sheet Name , you can comment it out
                    // MessageBox.Show(sheetname);

                    //Load the DataTable with Sheet Data
                    OleDbCommand oconn = new OleDbCommand("select * from [" + sheetname + "]", cnn);
                    //cnn.Open();
                    OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
                    DataTable dt = new DataTable();
                    adp.Fill(dt);

                    //drop $from sheet name
                    sheetname = sheetname.Replace("$", "");

                    //Create CSV File and load data to it from Sheet
                    StreamWriter sw = new StreamWriter(DestinationFolderPath + "\\" + filename + "_" + sheetname + ".csv", false);
                    int ColumnCount = dt.Columns.Count;
                    string[] columnName = new string[ColumnCount];
                    // Write the Header Row to File
                    for (int i = 0; i < ColumnCount; i++)
                    {
                        sw.Write(dt.Columns[i]);
                        columnName[i] = dt.Columns[i].ToString();
                        if (i < ColumnCount - 1)
                        {
                            sw.Write(FileDelimited);
                        }
                    }
                    sw.Write(sw.NewLine);

                    // Write All Rows to the File
                    foreach (DataRow dr in dt.Rows)
                    {
                        for (int i = 0; i < ColumnCount; i++)
                        {
                            if (!Convert.IsDBNull(dr[i]))
                            {
                                if (columnName[i] == "DATE_TIME")
                                {

                                    isDouble = Double.TryParse(dr[i].ToString(), out dbl);

                                    if (isDouble)
                                    {
                                        sw.Write(DateTime.FromOADate(dbl));
                                    }
                                    else
                                    {
                                        sw.Write(dr[i].ToString());
                                    }
                                }
                                else
                                {
                                    sw.Write(dr[i].ToString());
                                }
                            }
                            if (i < ColumnCount - 1)
                            {
                                sw.Write(FileDelimited);
                            }
                        }
                        sw.Write(sw.NewLine);
                    }
                    sw.Close();
                }
            }
            cnn.Close();
        }
第一张工作表编写成功,但在第二次迭代中,工作表名称没有更改,我遇到了此错误Microsoft Jet数据库引擎无法找到对象“surot$\ux”。确保对象存在,并且正确拼写其名称和路径名。在线adp.Filldt;即使完成了surot的csv文件创建,它仍在访问工作表surot$$


编辑1:当我检查dtsheet的行数时,它包含6而不是3。为什么会发生这种情况?此外,命名将变为surot$,surot$。它似乎复制了excel文件。

通过在参数中指定第二个参数,尝试按照获取架构,如下所示:

DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });

通过在参数中指定第二个参数,尝试按照获取架构,如下所示:

DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
我也有类似的问题

检查if语句中的最后一个字符是否不是下划线

出于某种原因,它总是像这样加倍。

我也有类似的问题

检查if语句中的最后一个字符是否不是下划线

出于某种原因,它总是像这样加倍