C# C microsoft excel 2003移动工作表
我正在执行SSIS包C脚本任务,并且正在将.xls文件转换为.csv文件,我遇到了这样一个问题,即只编写了一张工作表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
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语句中的最后一个字符是否不是下划线
出于某种原因,它总是像这样加倍