來自: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解決,結果發現效率還不錯。...