2013-03-20 34 views
0

我希望有人能幫我想出一個算法。如何在Excel文件中區分列/標題中的數據

對於Apache POI,我還是很新的東西,我被分配了一個關於如何讀取模板(Excel)和從數據本身提取標題/列名的算法。

以下內容必須考慮到:

  1. 可以有多個標頭/列名只在一個片上的Excel文件。

  2. 標題可以水平和/或垂直的性質。這意味着在一張紙上可能會有垂直和水平標題的混合。

  3. 標題不一定必須位於文件的第一行。那裏可能有介紹或橫幅圖片。

  4. 系統必須允許任何形式的Excel格式的,所以在單元格的格式,命名約定無法控制等

  5. 有些頭在本質上的字母數字,這意味着它也包含數字。

  6. 某些單元格被合併以爲特定標題騰出空間。

任何想法和建議都非常受歡迎。只要讓我知道你是否有進一步的說明。

+1

每個標題有沒有其他細胞有什麼?給出的標準沒有提供足夠的信息來定義與內容單元不同的標題。 – 2013-03-20 11:28:58

回答

4

(我什麼都不知道了Apache,但一些有關Excel互操作工作)

如果被檢測到的紙張是你的,我會建議更換指定使用這些標題單元格。 (爲了在Excel中命名一個單元格,在屏幕左上角有一個字段,通常單元格的座標出現(像「A1」或「B2」等等)。在那個地方輸入一個名字, ('Worksheet.Range(「Name」)'是通過代碼獲取這些單元格的地方)

要管理名稱,請轉到「插入 - 名稱」或「公式 - 名稱管理器「,這取決於什麼版本的Excel。

(個人而言,我從來沒有通過代碼工作與表沒有命名標題,然後我使用」偏移「來獲取與這些標題對應的數據單元 - 這讓我以後自由編輯表格而不會破壞代碼)

如果表單不是你的,那麼,你需要找出數據的範圍。 (最後一行和最後一列) 然後檢查包含所有填充列的第一行,它們都沒有空白。這是一個可能的水平標題。 以及檢查包含所有填充行的第一列。這是一個可能的垂直標題。

您也可以搜索完全空白的行和/或列,以查找包含多個水平標題或垂直標題的數據後面的標題。

您可以使用這些單元格的一些格式屬性(Range.Interior或Range.Font作爲示例)來確定它們是否爲標題(通常標題具有不同的格式,顏色,邊框等)。

如果您確定沒有數字標題,我的意思是,所有標題都包含文本,請檢查單元格中數據的類型。如果全部是字符串,則標題概率增加。

即便如此,如果工作表沒有遵循某種模式,偶爾其中一個可能會欺騙您的代碼並帶來錯誤結果,但這仍然是一件棘手的事情。如果允許,我建議添加人工驗證以確認在完成過程後的結果。

+0

很棒的回答。 +1 :) – 2013-03-20 17:08:06

+0

謝謝你的回覆。這項任務的可悲之處在於程序必須接受任何一種Excel格式。一些標題包含數字。 – 2013-03-21 00:45:19

+0

你可以做點什麼給某些行或列。 作爲第一個完成的,一個點,只有文本,另一個點,有不同的格式化(注意交替行格式),更多的點,不同的邊界,更多的點... – 2013-03-22 11:46:23

相關問題