SSIS和Excel文件传奇

我有一个Excel文件(xls)有一个名为钱的列。 在“钱”列中,所有列都被格式化为数字,除了一些将标记格式化为文本的格式。 我使用在连接string中使用IMEX = 1的ac#脚本将Excel文件转换为CSV以将其打开。 存储为文本的字段不会传递到csv文件。 该文件很大,大约20MB。 所以这意味着像33344等100个值不会来自csv文件。

我试图延迟打开Excel文件的位置。 这工作在我的电脑,但不是开发机器。

有没有任何想法如何绕过这个没有手动干预,如格式所有列混合数据types为数字等? 我正在寻找一种每次都能工作的自动化解决scheme。 这是在SSIS 2008。

static void ConvertExcelToCsv(string excelFilePath, string csvOutputFile, int worksheetNumber = 1) { if (!File.Exists(excelFilePath)) throw new FileNotFoundException(excelFilePath); if (File.Exists(csvOutputFile)) throw new ArgumentException("File exists: " + csvOutputFile); // connection string var cnnStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", excelFilePath); var cnn = new OleDbConnection(cnnStr); // get schema, then data var dt = new DataTable(); try { cnn.Open(); var schemaTable = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (schemaTable.Rows.Count < worksheetNumber) throw new ArgumentException("The worksheet number provided cannot be found in the spreadsheet"); string worksheet = schemaTable.Rows[worksheetNumber - 1]["table_name"].ToString().Replace("'", ""); string sql = String.Format("select * from [{0}]", worksheet); var da = new OleDbDataAdapter(sql, cnn); da.Fill(dt); } catch (Exception e) { // ??? throw e; } finally { // free resources cnn.Close(); } // write out CSV data using (var wtr = new StreamWriter(csvOutputFile)) { foreach (DataRow row in dt.Rows) { bool firstLine = true; foreach (DataColumn col in dt.Columns) { if (!firstLine) { wtr.Write(","); } else { firstLine = false; } var data = row[col.ColumnName].ToString().Replace("\"", "\"\""); wtr.Write(String.Format("\"{0}\"", data)); } wtr.WriteLine(); } } } 

我的解决scheme是为input文件指定一个格式,表示没有混合数据types的列。 解决scheme来自商业而不是技术。