日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)

發(fā)布時間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  本次隨筆主要講述著工作中是如何解決數(shù)據(jù)導(dǎo)出的,對于數(shù)據(jù)導(dǎo)出到excel在日常工作中大家還是比較常用的,那導(dǎo)出到word呢,改如何處理呢,簡單的頁面導(dǎo)出問題應(yīng)該不大,但是如果是標(biāo)準(zhǔn)的公文導(dǎo)出呢,要保證其基本格式,如紅頭、抬頭、文號等等格式的限制我們又該如何處理呢?

主要原理:

1、利用excel、word做好模板,在模板中設(shè)置關(guān)鍵字

2、在程序中調(diào)用模板,替換關(guān)鍵字

3、將替換后的模板作為導(dǎo)出文件輸出

一、導(dǎo)出到EXCEL,在此處先從簡單的入手,先描述如何利用excel做導(dǎo)出。步驟如下:

1、用excel2007隨便創(chuàng)建一個excel文件,打開添加如下數(shù)據(jù):

2、點擊另存,將excel文件另存為xml格式文件,選擇2003xml格式,如下圖:

3、右鍵用記事本打開剛剛另存到xml文件,觀察xml內(nèi)容會發(fā)現(xiàn)其妙之處,如下圖:

? 如上圖所示,注意觀察,每一個WorkSheet都用了一段xml代碼來表示,方框部分為我們寫入的數(shù)據(jù),圓圈部分為我們要處理的重要部分。

? 小圓圈內(nèi)的2表示當(dāng)前數(shù)據(jù)2行,大圓圈表示我們看到的三行三列數(shù)據(jù),因此我們要做的就是將我們要導(dǎo)出到數(shù)據(jù)寫成圓圈中的格式就行了。

4、改進(jìn)xml文件,創(chuàng)建關(guān)鍵字,如下圖:

? 如上圖所示,我們創(chuàng)建了兩個關(guān)鍵字,具體含義不多說。

? 最后將創(chuàng)建好的xml文件,也就是你的excel模板可以放入到項目中了,接下來要做的就是將數(shù)據(jù)生成并按照標(biāo)準(zhǔn)格式輸出,進(jìn)行替換關(guān)鍵字即可。

5、數(shù)據(jù)生成并輸出,如下所示:

public byte[] GetData(string path, string tempName){//實例化內(nèi)存流MemoryStream fileStream = new MemoryStream();//寫文件流StreamWriter fileWriter = new StreamWriter(fileStream);//讀文件流StreamReader fileReader = new StreamReader(path, System.Text.Encoding.UTF8);//讀取整個文件的內(nèi)容string tempStr = fileReader.ReadToEnd();//得到要導(dǎo)出的信息DataTable dt = airport.GetDataView();//定義變量獲取表的數(shù)據(jù)行數(shù)int rows = 0;//定義StringBuilder變量來存儲字符串StringBuilder sb = new StringBuilder();//判斷表是否有數(shù)據(jù)if (dt != null && dt.Rows.Count > 0){//給變量賦值rows = dt.Rows.Count;int num = rows + 1;//此處1表示模板中表頭的行數(shù),且默認(rèn)為1,可自行增加表頭并定義if (tempStr.IndexOf("+#RowCount#+") > 0){tempStr = tempStr.Replace("+#RowCount#+", "" + num + "");}//開始循環(huán)生成標(biāo)準(zhǔn)字符串for (int i = 0; i < rows; i++){sb.Append("<Row>\n"+ "<Cell><Data ss:Type=\"String\">" + dt.Rows[i]["Name"] + "</Data></Cell>\n"+ "<Cell><Data ss:Type=\"String\">" + dt.Rows[i]["Sex"] + "</Data></Cell>\n"+ "<Cell><Data ss:Type=\"String\">" + dt.Rows[i]["Age"] + "</Data></Cell>\n"+ "</Row>\n");}if (tempStr.IndexOf("+%Data%+") > 0){tempStr = tempStr.Replace("+%Data%+", sb.ToString());}}fileWriter.WriteLine(tempStr);fileWriter.Flush();byte[] bytes = fileStream.ToArray();fileStream.Close();fileWriter.Close();fileReader.Close();return bytes;}

如上所示,創(chuàng)建獲取數(shù)據(jù),并返回我們要輸出的字符串,并轉(zhuǎn)成二進(jìn)制流,具體操作因人而異。接下來調(diào)用此方法替換數(shù)據(jù),并輸出excel新文件。

protected void btnExport_Click(object sender, EventArgs e){byte[] bytes = GetData(Server.MapPath("xml模板的路徑"), "");//實現(xiàn)下載Response.AddHeader("Content-Type", "application/octet-stream");Response.Buffer = true;Response.ContentType = "*/*";Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("導(dǎo)出的文件.xls", System.Text.Encoding.UTF8));Response.AddHeader("Content-Length", bytes.Length.ToString());Response.BinaryWrite(bytes);Response.End();}

總上所述,一個完成的數(shù)據(jù)導(dǎo)出到EXCEL就完成了。
優(yōu)點:

1、可以導(dǎo)出任何你可以在excel中能模擬出來的數(shù)據(jù)樣式,包括圖形嵌入。在后一篇會講解如何導(dǎo)出圖片到excel,word。

2、整個過程不復(fù)雜,不需要調(diào)用插件、office組件,BS或者CS模式的方式都適用,沒有復(fù)雜的邏輯過程。

3、解決多sheet導(dǎo)出數(shù)據(jù)。

缺點:需要先做模板

注意事項:模板中的關(guān)鍵字要根據(jù)數(shù)據(jù)內(nèi)容而定,不要出現(xiàn)關(guān)鍵字沖突的情況,關(guān)鍵字字符標(biāo)準(zhǔn)由開發(fā)者自行定奪。

下一篇介紹如何導(dǎo)出數(shù)據(jù)到word,這個導(dǎo)出就相對復(fù)雜一些,但是原理一致,重點是圖片導(dǎo)出到word中是什么原理。

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/tzy080112/p/3413938.html

總結(jié)

以上是生活随笔為你收集整理的无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。