+
了解Excel的. xls的二進制文件格式 摘要:了解用於在以前發布的Microsoft Excel產品MS-XLS二進制文件格式。 本文中包含有與這種文件格式編程方式進行交互的基本結構和主要概念。 推薦的方法在Microsoft Excel中執行大多數編程任務是使用Excel的主互操作程序集。 這是一組類,提供了一個完整的對象模型,與Microsoft Excel工作。 本系列文章僅涉及高級場景,如在未安裝Microsoft Excel。 在MS-XLS文件格式的關鍵組件 在創紀錄的描述中的[MS-XLS]:Excel的二進制文件格式(.xls)結構規格不包括提記錄類型(RT)的字節(CB)值組成的前四個字節的記錄和計數 。 欲了解更多信息,請參閱MS-XLS規範的第2.1.4。 這些是主要的流,子流,並且在MS-XLS格式文件記錄。 記錄中的特定的字節位置都將來自CB字段結束計數。 該工作簿流是一個. xls文件中的主流。 它包含多個子流,其每一個開始的文件(BOF)記錄一個開始,並與文件(EOF),記錄一個完結束。 第一流總是全局子,和其餘的是片子流。 這些措施包括工作表,宏表,圖表工作表,對話工作表和VBA模塊工作表。 在全局子指定工作簿中的全局屬性和數據。 它還包括在工作簿流中的每個子一個BoundSheet8記錄。 一個BoundSheet8記錄提供了有關一個表子信息。 這包括名稱,位置,類型和知名度。 前4個字節備案,lbPlyPos FilePointer的,對指定的表子開始在那裡工作簿流中的位置。 工作表子指定工作簿中的一個表。 單元格表是其中細胞被存儲在片流的一部分。 它包含一系列行塊,其每一個的容量為32列細胞,並依次填充的。 每個行塊以一系列行記錄,隨後由該走行中的細胞開始,並且與一個記錄DBCell,這給起始塊中的每一行的第一個單元的偏移結束。 一排記錄定義在一個表中的一行。 這是一個複雜的結構,但需要對基本內容檢索僅在第6個字節。 這些給行索引,所述第一單元的列和包含行中的數據或獨特的格式化最後細胞。 所有細胞在連續塊中的每塊中的最後一行之後存儲。 有七種的記錄的代表實際的細胞在一個工作表。 大多數細胞記錄以一個6個字節的細胞結構。 前2個字節的那些的指定行,下一個2字節指定列,最後2個字節指定的全局子流包含格式信息的XF記錄。 以下記錄代表不同類型的細胞。 除另有規定外,前6個字節被採取了由細胞結構,而其餘的字節包含值。 空白單元格記錄 空白單元格記錄指定一個沒有公式或值的空白單元格。 此記錄類型僅用於包含單個格式細胞; 否則,空白單元格都存儲在MulBlank記錄或根本沒有。 RK細胞記錄 一個RK細胞記錄包含一個32位的數字。 的Excel自動轉換,可以在32位或更少來表示,以這種格式存儲,以此來減小文件大小的數字。 代替一個6字節單元結構的,前2個字節指定行和第二2個字節指定列。 剩餘的6個字節中定義的RkRec結構為磁盤和存儲器優化的數目。 BoolErr細胞記錄 甲BoolErr細胞記錄包含一個2字節的貝斯結構可以是一個布爾值或錯誤代碼。 許多細胞記錄 許多細胞記錄包含一個64位浮點數字。 一個LabelSst細胞記錄包含一個4字節的整數,指定一個字符串中的共享字符串表(SST)。 具體地,整數對應於SST的RGB場的數組索引。 公式單元格記錄 公式單元格記錄包含公式和結果數據。 在單元中顯示的值被定義在一個FormulaValue結構中的8個字節跟隨細胞結構。 在接下來的6個字節可以被忽略,和該記錄的其餘部分是包含式本身CellParsedFormula結構。 一個MulBlank記錄指定了一系列的空白單元格成一排。 前2個字節給出的行,和接下來的2字節給出,該系列的坯料開始處的列。 接著,信元結構的可變長度數組如下存儲格式的信息,以及最後的2個字節顯示什麼列中的一系列坯料端上。 一個MulRk記錄就像是一個MulBlank記錄,但空白單元格,而不是一個MulRk記錄包含在RkRec結構RK數據。 共享字符串表(SST)中包含的所有工作簿中的字符串值。 這些值是在工作表中由LabelSst細胞記錄引用。 前8個字節SST中給出的參考文獻的數量到工作簿中的字符串和獨特的字符串值在SST數量。 其餘的是包含字符串本身作為字符數組XLUnicodeRichExtendedString結構的陣列。 位該結構16指定的字符是否是1個字節或每2個字節。 您可以使用繼續記錄,如果串的數量或長度超過其範圍擴大雙方的SST結構和XLUnicodeRichExtendedString結構。 從Excel文件中提取數據 所有MS-XLS格式文件內容住在板子流。 雖然你可以不加選擇地加載每片子,您使用BoundSheet8記錄來定位只是你想要閱讀的床單獲得更多的控制和效率。 解析公式和格式化信息超出了本文的範圍。
No comments:
Post a Comment