如何從web頁面導(dǎo)入excel單元格數(shù)據(jù)、又如何把查詢出來的數(shù)據(jù)放到web頁面上顯示成客戶需要的圖表?并且導(dǎo)出到excel中?
成都創(chuàng)新互聯(lián)專注于孟津網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供孟津營銷型網(wǎng)站建設(shè),孟津網(wǎng)站制作、孟津網(wǎng)頁設(shè)計、孟津網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造孟津網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供孟津網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
有兩種方案:
1.用Excel自動化技術(shù)。
引用Excel的類型庫生成.Net的包裝類。導(dǎo)入時采用頁面放上傳文件按鈕的方法,在服務(wù)器端收到文件后,用excel自動化類打開excel文件,再學(xué)會VBA語法,書寫大量的代碼讀取單元格,然后連接數(shù)據(jù)庫保存。導(dǎo)出時,查詢數(shù)據(jù)庫,啟動excel自動化對象,通過VBA語法填寫單元格,保存成excel文件,再用Response.OutputStream輸出到頁面上,觸發(fā)excel文件的下載保存框。缺點:容易在服務(wù)器端產(chǎn)生excel死進程,代碼編寫復(fù)雜、代碼量大、還要掌握VBA語法,用戶需要上傳、下載操作
有人會說,顯示數(shù)據(jù)時可以用網(wǎng)頁直接顯示,不用導(dǎo)出成excel。其實也很麻煩:用網(wǎng)頁顯示復(fù)雜的報表格式,網(wǎng)頁設(shè)計工作量大;如果客戶要求導(dǎo)出excel,這個工作就省不了;如果客戶要求打印、打印預(yù)覽、頁面設(shè)置,比起excel瀏覽器的打印就捉襟見肘了。
2.用微軟Office中間件——SOAOffice。(建議使用最新版的)
用SOAOffice輸出Excel,就不會再有上述煩惱。通過SOAOffice不僅能夠動態(tài)填充excel,讀取excel單元格,而且還能在瀏覽器里直接瀏覽excel、或者下載、另存。SOAOffice提供標(biāo)準(zhǔn)C#.Net組件,組件在服務(wù)器端不使用自動化調(diào)用,穩(wěn)定支持大量web并發(fā)訪問,這是用com調(diào)用無法實現(xiàn)的。組件的屬性方法都比較簡單,易于調(diào)用,你完全不用去掌握復(fù)雜的VBA調(diào)用。
由于是純.Net組件,所以服務(wù)器端不需安裝office。 SOAOffice的excel組件SOAExcel含有Sheet、Cell等類似Excel的簡化接口,調(diào)用簡單。SOAExcel不但能能把數(shù)據(jù)庫字段值動態(tài)填充到Excel單元格,還能把用戶輸入的單元格的值提出給開發(fā)者保存到數(shù)據(jù)庫。
SOAExcel能夠在客戶端瀏覽器的網(wǎng)頁里通過SOAOffice直接顯示生成的Excel,用戶不必先下載再打開觀看內(nèi)容。
舉個導(dǎo)出excel的例子:
SOAOfficeX.ExcelResponse SOAExcel = new SOAOfficeX.ExcelResponse();
SOAOfficeX.ExcelResSheet sheet1 = SOAExcel.openSheet("Sheet1"); // 打開一個Sheet
sheet1.openCell("D"+String.valueOf(8+i)).setValue(rs.getString("Count")); //循環(huán)填充數(shù)據(jù)。
SOAOfficeX.SOAOfficeCtrl SOACtrl = new SOAOfficeX.SOAOfficeCtrl(response);
SOACtrl.assign(SOAExcel); // 綁定數(shù)據(jù)
// 打開模板并生成最終的excel報表
SOACtrl.webOpen("doc/test.xls", 1, UserName, "Excel.Sheet");
上述代碼不但動態(tài)填充生成excel,而且在網(wǎng)頁里直接顯示生成的Excel給終端用戶,由于使用了1打開模式,Excel是只讀顯示的。
讀取excel單元格的代碼也很簡單:
SOAOfficeX.ExcelRequest SOAExcel = new SOAOfficeX.ExcelRequest();
SOAOfficeX.IExcelReqSheet sheetOrder = SOAExcel.OpenSheet("銷售訂單");
SOAOfficeX.IExcelReqCell cell1;
cell1 = sheetOrder.OpenCell("I5");//訂單編碼
string sOrderNum = cell1.Value;//cell1.Value就是讀取的結(jié)果
在項目A里添加引用,在“添加引用”對話框里找到項目B就可以了。也可以先把項目B生成dll文件,然后在項目A中添加對這個dll文件的引用。
‘首先,創(chuàng)建一個VB.NET項目,再點擊菜單”項目“-”添加引用“,在”Com“-”類型庫“里,選擇Microsoft.Word?14.0?Object?Library(對應(yīng)Office版本為2010),將以下代碼復(fù)制粘貼到Form1窗體替換原代碼。
’PS:以下代碼僅創(chuàng)建表格,將第行2至4列合并,添加1個文字,其他的你自己分析。
Imports?Microsoft.Office.Interop
Imports?Microsoft.Office.Interop.Word??'引入Word
Public?Class?Form1
Private?Sub?Form1_Load(sender?As?Object,?e?As?EventArgs)?Handles?MyBase.Load
Dim?DWrd?As?New?Word.Application,?DDoc?As?Word.Document?'定義Word及文檔對象
DDoc?=?DWrd.Documents.Add?'新增文檔
Dim?DTbl?As?Word.Table??'定義表格對象
DTbl?=?DDoc.Tables.Add(DDoc.Range,?7,?4)??'新增表格
DTbl.Style?=?"網(wǎng)格型"??'表格的樣式
DTbl.Cell(1,?2).Select()??'選擇起始單元格為第1行/第2列
DWrd.Selection.MoveRight(,?2,?SelectionMode.MultiExtended)??'向右擴展兩個單元格(即選擇第1行的第2至4列)
DWrd.Selection().Cells.Merge()??'單元格合并
DTbl.Cell(1,?1).Range.Text?=?1??'在第1個單元格填寫文本
DWrd.Visible?=?True?'顯示W(wǎng)ord
End?Sub
End?Class