2011-11-18 42 views
3

我們有將產品信息輸入到Excel電子表格的業務用戶。我的任務是提出將這些信息輸入到我們的SQL Server數據庫中的方法。問題在於Excel電子表格不僅僅是一張平坦的表格,它們是分層的。他們是這樣的如何將複雜的關係數據從Excel導入到SQL Server中

-[Product 1] [Other fields]... 
    -[Maintenance item 1] [Other fields]... 
     -[Maintenance task 1] [other fields]... 
    -[Maintenance item 2] [Other fields]... 
     -[Maintenance task 2] [other fields]... 
     -[Maintenance task 3] [other fields]... 
-[Product 2] [Product Description] [Other fields]... 
     ETC....... 

因此,可以有一個產品的零多維護項目和一個維護項目的多個維護任務。這就是數據庫的結構。我需要提出一個標準的Excel模板,我可以發送給我們的業務用戶,以便他們可以輸入這些信息,然後弄清楚如何將其導出到SQL Server中。數量會很高,所以我需要使導入有點自動化。我應該怎麼做?

+0

顯然不是。我從來沒有說過。如果是的話,這將不是什麼大問題。我解釋了你在上下文中引用的引用數據庫中表的關係。 –

+1

Spreadsheets,bleh。基於瀏覽器的在線門戶是一種可能的替代方案嗎? –

回答

5

歡迎來存儲數據,並嘗試將其導入到數據庫中以最壞的方式。如果可能的話,不要讓它們像這樣創建垃圾的Excel電子表格。這種方法必然會在數據導入中造成很多錯誤,如果你必須支持這個混亂,你將永遠討厭你的生活。

我不能相信我甚至暗示這一點,但你可以讓他們用一個簡單的Access數據庫呢?它甚至可以直接鏈接到SQL服務器數據庫並正確存儲數據。通過使用Access表單,用戶會發現添加和維護信息相對容易,並且與以您所描述的形式導入Excel數據相比,問題要少得多。這對您的問題來說將是一個非常便宜且不易出錯的解決方案。

你被困在格式中,我發現做類似這樣的事情的最好方法是將它按原樣導入暫存表中將ID添加到每個下級行(可能最終會循環執行此操作)並將其然後將信息拖出到關係登臺表中,然後導入到生產數據庫中。

你可以使用SSIS創建所有這些,但它不會很容易,它不會很快,並且如果用戶沒有嚴格遵守它們輸入數據的方式,它將非常容易出現錯誤(並且它們永遠不會沒有一組表格來填寫)。確保完全拒絕Excel電子表格,並將其發回給用戶,如果它違反規定的結構。請相信我。

我的估計的接入解決方案約需一個月和Excel解決方案至少需要6個月的開發。真的,這將是多麼糟糕。

+0

我爲數據導入數據導入,Excel導入總是最糟糕的,最脆弱的,可能會破壞並且最難開發。所以我盡一切可能以另一種格式獲取數據。 – HLGEM

1

它可能更有意義,打破它分成幾個Excel表格......一個產品,但隨後另一個用於維修項目,另一個是維護任務。對於每一個,他們都必須輸入某種ID將它們連接在一起(例如:maintenance_task_id = 1鏈接到maintenance_item_id = 4)。對於商業用戶來說,這可能是一個痛苦的記憶,但唯一的選擇是爲每一行輸入大量冗餘數據。

接下來,創建規範化的數據庫模型(以避免存儲冗餘數據),並通過寫一個應用程序或腳本來分析,通過您的Excel工作表填滿它。模糊和高層次,但我就是這麼做的。

+0

這是簡單的方法,但不幸的是,我無法通過管理來實現這一點。 –

2

我不相信你會找到一個導入工具,將爲你做到這一點。相反,你將不得不編寫一個腳本來ETL電子表格文件。我在Python中做了很多這樣的事情(事實上,我今天在做)。

確保您處理異常每細胞水平,向用戶報告到底哪個小區有意想不到的信息。使用手工創建的電子表格可以保證您必須定期處理此問題。也就是說,如果這是以XLSX的形式出現的話,那麼開發一個XML轉換將其轉換爲一些更易處理的XML文檔是可能的。

1

我同意以前的帖子一般...

我的建議 - 完全避免電子表格。花時間製作一個簡單的前端表單 - 最好是基於網頁的表單。儘可能乾淨地捕捉數據(這裏的任何內容都會比電子表格清潔度更好 - 包括只有命名的字段)

您將花費較少的時間到最後。

1

我會將VBA代碼添加到模板,以便儘可能多地爲用戶數據輸入和驗證添加結構和智能。

在這種極端情況下,您可以讓用戶通過表單輸入所有數據,這些數據將所有驗證數據放在工作表上,然後在保存或關閉事件中內置一個整體驗證例程。
不那麼極端的是添加3個命令按鈕驅動代碼爲
- 添加產品
- 增加保養項目
- 在保存加入維護任務
和一些整體的驗證碼/關閉
這樣你添加儘可能多的智慧儘可能爲數據錄入任務。

使用命名單元格或由VBA代碼創建的其他隱藏元數據作爲標記,以便您的數據庫更新例程可以更好地理解數據。

我做了這樣的最後一個包含了數據庫更新程序的3-4個萬維網,但我認爲它可能比您的示例更復雜。
但是,如果您對VBA和Excel對象模型和事件沒有經驗,那麼顯然需要更長的時間。

相關問題