C 開發Excel報表一

2021-04-28 11:54:06 字數 1637 閱讀 5571

最近做了很長時間的excel開發,雖說有些報表的要求很**,但是成果與時間還是成反比,尤其是報表的顯示太依賴與資料的結構,一旦系統中的資料結構不符合要求時,總是會導致程式出現錯誤。雖然程式最終通過了測試,但是在發布之後的第一天還是出現了諸多問題,總結下來有三類問題,一是型別轉換時出現溢位的現象,二是執行sql語句時出現超時的情況,另外乙個,我直到現在還在納悶,即是單元格合併時由於合併的單元格原本的資料沒有清空,從而在合併時出現 excel合併提示的問題(合併單元格在程式中大量出現,並且本人在合併單元格時已經對要合併的單元格的資料進行清空,賦值為「」,而不是null,據經理說問題就在要設定為null而不是「」,但是同樣的程式,卻在測試庫中不出現合併提示,在正式庫中卻出現,讓人百思不得其解)。好了,就不在找藉口了,錯了就是錯了,只要避免不要下次還在這個地方出錯就好。

報表樣例如下:

先說說資料的大致結構,吧:資料表a中de欄位如下:

id  

xmmc  --專案名稱

sortcode --排序編碼

parent_id --父級id

dwtype--單位型別,分為但單位和雙單位

dwmc--單位名稱

haschilderen --是否下級子節點

其中sortcode欄位比較關鍵,如果為第一級節點,sortcode的長度為5位,例如:00001。該一級節點的下級節點,即第二級節點的長度為10,為0000100001。也就是說我們可以根據sortcode的長度來推斷當前的專案名稱在系統中處於第幾層節點。

而在報表中我們需要實現的是現實最下層節點的資料,同時又要顯示該層節點的所對應的所有的上級節點。

接下來描述一下整個報表看法中需要注意的事項:

a.首先是不確定表中有幾層節點,並且節點的層數是不相同的。此外,同時處於上層節點的專案名稱如果出現相鄰兩列或者兩行的名稱相同的情況時,需要進行合併,因此具體的報表的樣式可能會出現下圖這樣的:

b .簽字行。由於報表涉及到簽字的問題,同時每頁都需要顯示簽字資訊,這樣我們就需要判斷每頁大概顯示多少條資料,然後再插入簽字資訊,注意出入簽字資訊時還需要考慮到樣式問題。

c .在每次重新重新整理excel表中的資料時還需要注意清除掉excel中的資料,excel恢復到最初的樣式。不然當資料發生改變時,會出現程式上的問題,詳細的問題會在及接下來的文章中描述。

現在基本就可以動手製作整個報表了。如何製作這張報表,思路如下。

首先我們需要兩個資料集,乙個是讀取所有的最底層資料集的資料,將這些資料一次性寫到excel中,接著,根據這些資料的行數來判斷資料大概有幾頁,然後再插入簽字行,完成以上工作後,就需要完成開始縱向合併根節點的專案名稱,因為根節點的專案一般不會參與橫向合併。合併好根節點的名稱後,要判斷下整個資料中的父級節點是否大於三層,如果是則需要插入父節點和根節點之間的所有的節點,這需要借助另外的資料集來實現。接著先縱向合併上層節點的相同的專案名稱,然後橫向合併相同的專案名稱。這樣基本樣式就會成形

C 開發EXCEL報表

最近專案中需要做匯出excel以及具有複雜表頭excel的彙總,其實都不算麻煩,基本上都做過匯出excel,具有複雜表頭excel的彙總以前也用active控制項實現了,但是效率都不是太理想。最後在乙個群友的提醒下,嘗試著用opendatasource datarowset解決,結果發現效率還不錯。...

C 開發Excel報表二

在這裡介紹一下excel開發報表用到的一些基本的方法,例如單元格的合併,行與列的插入等操作。以及在excel中遍歷出相鄰單元格的並合併的方法。單元格合併,單元格合併需要注意的是在合併之前需要清空帶合併單元格的資料,否則在合併時會彈出提示框,在合併之後在給單元格賦值。合併單元格 public void...

C 操作excel(報表)

新增乙個worksheet worksheet worksheet worksheet workbook.worksheets.add system.type.missing,system.type.missing,system.type.missing,system.type.missing ro...