使用C 和Excel進行報表開發(3)

2021-05-07 15:42:33 字數 3000 閱讀 7026

來自:http://hi.baidu.com/zhangqiuxi/blog/item/7f75b88208688398f603a6b1.html

內容摘要:本文介紹使用c#呼叫excel來生成統計圖(chart)的以及chart圖中各部分控制的一些方法。

有的web專案選用excel作為報表方案,在伺服器端生成excel檔案,然後傳送到客戶端,由客戶端進行列印。在國內的環境下,相對pdf方式,excel的安裝率應該比pdf閱讀器的安裝率要高,同時,微軟也為c#操作excel提供了完備的介面,雖然zedgraph和其他的商業報表工具生成的統計圖也很好,但是人家微軟畢竟是大品牌,值得信賴。

本文介紹使用c#呼叫excel來生成統計圖(chart)的以及chart圖中各部分控制的一些方法。

首先當然要新增對excel的引用,然後需要定義幾個要用到的excel物件:

在建立乙個新的_workbook物件的時候,預設的會含有3個sheet,所以為了顯示清晰,將多餘的sheet都刪掉:

再下來需要新增用來給chart提供資料的sheet:

private void adddatasheet()

生成chart用到的資料,因為是演示,所以這裡使用生成隨機數的方法來替代從資料庫中提取資料。

private void loaddata()

}好了,到此,準備工作全部已經就緒,下面要進行chart的生成設定部分了:

生成乙個統計圖物件:

excel.chart xlchart = (excel.chart)thisworkbook.charts.

add(type.missing, xlsheet, type.missing, type.missing);

excel.range cellrange = (excel.range)xlsheet.cells[1, 1];

通過嚮導生成chart:

xlchart.chartwizard(cellrange.currentregion,

excel.xlcharttype.xl3dcolumn, type.missing,

excel.xlrowcol.xlcolumns,1, 0, true ,

"訪問量比較(dahuzizyd.cnblogs.com)", "月份", "訪問量",

"");

到此,chart的生成就完成了,貌似比較簡單,下面我們對其作一些設定,好更漂亮些。

設定統計圖sheet的名稱:

xlchart.name = "統計";

現在的統計圖只有乙個組,他們會顯示成一樣的顏色,我們來讓12個bar都顯示不同的顏色:

excel.chartgroup grp = (excel.chartgroup)xlchart.chartgroups(1);

grp.gapwidth = 20;

grp.varybycategories = true;

現在chart的條目的顯示形狀是box,我們讓它們變成圓柱形,並給它們顯示加上資料標籤

excel.series s = (excel.series)grp.seriescollection(1);

s.barshape = xlbarshape.xlcylinder;

s.hasdatalabels = true;

下面再來設定統計圖的標題和圖例的顯示:

xlchart.legend.position = xllegendposition.xllegendpositiontop;

xlchart.charttitle.font.size = 24;

xlchart.charttitle.shadow = true;

xlchart.charttitle.border.linestyle = excel.xllinestyle.xlcontinuous;

最後設定兩個軸的屬性,excel.xlaxistype.xlvalue對應的是y軸,excel.xlaxistype.xlcategory對應的是x軸:

excel.axis valueaxis = (excel.axis)xlchart.axes(excel.xlaxistype.xlvalue, xlaxisgroup.xlprimary);

valueaxis.axistitle.orientation = -90;

excel.axis categoryaxis = (excel.axis)xlchart.axes(excel.xlaxistype.xlcategory, xlaxisgroup.xlprimary);

categoryaxis.axistitle.font.name = "ms ui gothic";

到此,一切就緒了,下面要生成chart,並將其存為乙個excel檔案:

完成了chart的生成,但是上面對於每個月只有一項資料,如果我想顯示多項呢,例如顯示每個月兩個頁面的範圍量的對比。方法很簡單,只要再多生成一組資料就可以了,我們修改下loaddata方法:

private void loaddata()

}

再次執行程式,生成chart看看,應該像下面的效果:

可以看到,兩組資料以不同的形狀顯示,同時,圖例部分也不再顯示1-12月共12項,而是顯示兩項,這是因為在上面的**中我們設定了chartgroup的varybycategories 屬性:

grp.varybycategories = true;當我們有兩個以上的組時,這一項就失效了。

在用c#操作excel的時候,恐怕最大的困難就在於不知道excel提供的各個物件,以及它們的屬性,方法等資訊,好在msdn裡有關於excel的介面說明-excel primary interop assembly reference,參照這些,相信很快就能上手了。

最後是完整**:

private void loaddata()

}/**

/// 刪除多餘的sheet

///

private void adddatasheet()

/**

/// 建立統計圖    

///

private void createchart()

使用C 和Excel進行報表開發(1)

內容摘要 下面是乙個簡單的例子,開啟乙個定義好的excel檔案,這個檔案是作為報表的模板,然後向模板的指定格仔裡填充資料,形成乙個報表,在web方式下可以按照指定的命名方式在伺服器上生成乙個excel檔案,之後傳送到客戶端,由客戶端啟動excel進行列印。目前的商業工具如水晶報表,activerep...

使用C 和Excel進行報表開發(2)

內容摘要 下面的 使用乙個現有的統計圖excel檔案,載入這個檔案,設定某一項的值和統計圖的表示方式,然後儲存到另乙個excel檔案裡。如果是vs2005 office2003,也可以選擇使用visual studio tools for office來作。下面的 使用乙個現有的統計圖excel檔案...

C 開發EXCEL報表

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