2011-10-14 25 views
0

我有一個Excel '97電子表格,它由外部自動過程生成,我想通過SSIS將其導入到SQL [2008 R2]表格中。我要導入的列包含某些單元格中的文本值和其他單元格中的日期值。要連接到Excel數據,我有一個「Excel源」數據流源,其中OpenRowset屬性已設置爲特定的列範圍:Sheet1 $ A1:A100。我在Excel Source之後直接添加了一個網格數據查看器,以便我可以查看「原始」結果。Excel單元格的日期值無法通過SSIS正確導入

執行包時,我查看數據查看器結果,並將包含日期的所有單元格都作爲NULL來處理。奇怪的是,文本字段和數字字段正常顯示並在數據查看器中正確顯示。如果我在日期值前面放置單引號(撇號),以便將日期視爲文本,則會正確導入。如果我右鍵單擊Excel中的某個日期字段並轉到「格式化單元格...」,它們全部顯示爲「日期」。

這些Excel文件是由我無法控制的進程自動生成的,我無法手動編輯每個文件以使它們正確導入。在Excel Source的External Columns部分中,該列顯示的數據類型爲「Unicode字符串[DT_WSTR]」,所以我認爲它只會將其作爲文本導入。

我非常感謝任何關於如何讓這些日期值正確導入的建議。先謝謝你!

+0

你說你的列有文本和日期值的混合,並且列被導入爲「字符串」。由於日期作爲數字值存儲在Excel中(並且只顯示爲文本),所以也許這就是爲什麼您的日期以空值顯示的原因。一個好的開始將是至少讓你的列數據類型一致。 –

+0

聽起來像問題存在於任何創建Excel文檔的過程中。這些值的格式是什麼?複製並粘貼進程爲您踢出的值的示例,以便我們可以看到如何將它寫入Excel文件。 – KreepN

回答

1

我不知道是否有一種「好」的方法來處理SSIS中的這種情況,但我可以想到一些或多或少的醜陋想法。按照越來越黑客的順序:

  1. 詢問誰提供這些文件給你使用更好的數據庫友好格式(而不是列的數據類型在行之間變化的)。
  2. 如果您事先知道哪些行將包含文本,哪些包含日期,您可以嘗試多次打開電子表格,每次更改範圍以使數據類型保持一致。
  3. 您可以在Excel中手動打開電子表格並將其保存爲文本文件;然後將文本文件提供給您的SSIS包。所有日期將被轉換爲文本(基於您的區域設置)。
  4. 您可以編寫Windows腳本在Excel中打開電子表格並將其保存爲文本文件,然後將文本文件提供給您的SSIS包。
  5. 您可以編寫一個SSIS腳本任務,使用Excel自動化模型打開電子表格並以任何適當的方式處理每個單元格。
  6. 您可以推出自己的Excel連接管理器,該管理器可以配置爲將特定範圍內的所有單元格視爲文本。 (嗯,這可能會越過黑客和犛牛剃鬚。)

我認爲#1是最好的長期解決方案,但它聽起來並不像它會很快發生。也就是說,將電子表格保存爲文本將至少可以使SSIS輕鬆處理這些內容,而這可能足以克服直接障礙。

+0

首先,感謝所有偉大的意見和建議。最後,我找到了一篇文章,詳細說明它是如何查看前8個字符來確定數據類型的。爲了解決這個問題,我在連接字符串的末尾添加了「IMEX = 1」文本 - 請參閱http://support.microsoft.com/kb/194124。一旦我這樣做,它正確地導入日期字段。再次,我不能從我的客戶更改這個Excel文檔的格式,所以我必須這樣處理它。再次感謝! – Loki70

+0

不客氣 - 並感謝**你**指向IMEX = 1提示! –

相關問題