C#microsoft excel 2003遍历工作表

时间:2017-08-24 23:30:28

标签: c# excel ssis

我正在开发一个SSIS包C#脚本任务,我正在将.xls文件转换为.csv文件,我遇到了这个问题,只写了一张表




  string fileFullPath =“”;

 //一本书(一次是Excel文件)
 foreach(文件中的FileInfo文件)
 {
 string filename =“”;
 fileFullPath = SourceFolderPath +“\\”+ file.Name;
 filename = file.Name.Replace(“。xls”,“”);
 //MessageBox.Show(fileFullPath);

 //创建Excel连接
 string ConStr;
字符串HDR;
 HDR =“是”;
 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;


 //获取工作表名称
 cnn.Open();
 DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
 string sheetname;
 sheetname =“”;
 foreach(dtSheet.Rows中的DataRow drSheet)
 {
 if(drSheet [“TABLE_NAME”]。ToString()。包含(“$”))
 {
 sheetname = drSheet [“TABLE_NAME”]。ToString();
 //显示工作表名称,您可以将其注释掉
 // MessageBox.Show(sheetname);

 //使用Sheet Data&#xA加载DataTable; OleDbCommand oconn = new OleDbCommand(“select * from [”+ sheetname +“]”,cnn);
 //cnn.Open();
 OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
 DataTable dt = new DataTable();
 adp.Fill(DT);

 //从表名&#xA中删除$; sheetname = sheetname.Replace(“$”,“”);

 //创建CSV文件并从Sheet&#xA加载数据到它StreamWriter sw = new StreamWriter(DestinationFolderPath +“\\”+ filename +“_”+ sheetname +“.csv”,false);
 int ColumnCount = dt.Columns.Count;
 string [] columnName = new string [ColumnCount];
 //将标题行写入文件
 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);

 //将所有行写入文件
 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));
 }
否则
 {
 sw.Write(DR [I]的ToString());
 }
 }
否则
 {
 sw.Write(DR [I]的ToString());
 }
 }
 if(i< ColumnCount  -  1)
 {
 sw.Write(FileDelimited);
 }
 }
 sw.Write(sw.NewLine);
 }
 sw.Close();
 }
 }
 cnn.Close();
 }
  




第一张成功写的表,但在第二次迭代中,表名不会改变,我输入了这个错误 Microsoft Jet数据库引擎找不到对象'surot $ _'。确保对象存在,并正确拼写其名称和路径名。 adp.Fill(dt); 它仍然访问工作表 surot $ 甚至它完成了 surot $





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




2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我有类似的问题。

检查IF语句中的最后一个字符是否不是下划线“_”。

出于某种原因,它总是会加倍。