最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

asp.net下用Aspose.Words for .NET動態(tài)生成word文檔中的數(shù)據(jù)表格的方法

 更新時間:2010年04月14日 17:00:25   作者:  
導(dǎo)出word 文檔,要求這個文檔的格式不是固定的,用戶可以隨便的調(diào)整,導(dǎo)出內(nèi)容中的數(shù)據(jù)表格列是動態(tài)的,例如要求導(dǎo)出姓名和性別,你就要導(dǎo)出這兩列的數(shù)據(jù),而且這個文檔不是導(dǎo)出來之后再調(diào)整而是導(dǎo)出來后已經(jīng)是調(diào)整過了的。

1、概述

  最近項(xiàng)目中有一個這樣的需求:導(dǎo)出word 文檔,要求這個文檔的格式不是固定的,用戶可以隨便的調(diào)整,導(dǎo)出內(nèi)容中的數(shù)據(jù)表格列是動態(tài)的,例如要求導(dǎo)出姓名和性別,你就要導(dǎo)出這兩列的數(shù)據(jù),而且這個文檔不是導(dǎo)出來之后再調(diào)整而是導(dǎo)出來后已經(jīng)是調(diào)整過了的??吹竭@里,您也許馬上想到用模板導(dǎo)出!而且.NET中自帶有這個組件:Microsoft.Office.Interop.Word,暫且可以滿足需求吧。但這個組件也是有局限性的,例如客戶端必須裝 office組件,而且編碼復(fù)雜度高。最麻煩的需求是后面那個----動態(tài)的表格列頭!下面就介紹如何使用 Aspose.Words for .NET來動態(tài)的生成word文檔中的數(shù)據(jù)表格。

2、正文

    Aspose.Words, 是Aspose“家族類庫”之一。除這個以外,還有其他許多厲害的類庫例如Aspose.pdf(操作PDF文件的類庫)、Aspose.Flash(操作 Flash文件的類庫)、Aspose.report(操作報表的類庫)等等,大家有興趣的可以上官方網(wǎng)研究下。這些類庫都包含兩種語言,一種是java ,另一種是.NET.這里主要是介紹Aspose.Words for .NET。Aspose.Words for .NET功能非常強(qiáng)大,您不需要安裝office組件,都可以用這個來生成word文檔。Aspose.Words支持 DOC,DOCX,OOXML,RTF格式,HTML格式,OpenDocument格式,PDF格式,和其他格式 。從下面圖中,大家可以更加詳細(xì)的了解Aspose.Words的架構(gòu)。有一點(diǎn)忘了提,這套類庫是收費(fèi)的,在本文后面我會提供一個破解版的下載地址給大家的。

在介紹如何動態(tài)的生成的表格之前,我們看看這個類庫是如何根據(jù)模板來生成值的:

首先,我們來建立一個 word模板:template.doc 。在文檔中需要生成的數(shù)據(jù)地方建立一個書簽,如圖:

在這里大家可以看到,我們主要是通過BookMark來操作,做為動態(tài)的數(shù)據(jù)的源。

下面我們來看看具體是怎么實(shí)現(xiàn)的:

復(fù)制代碼 代碼如下:

string tmppath = Server.MapPath("~/template.doc");
Document doc = new Document(tmppath); //載入模板
if (doc.Range.Bookmarks["name"] != null)
{
Bookmark mark = doc.Range.Bookmarks["name"];
mark.Text = "張三公司";
}
doc.Save("demo.doc", SaveFormat.Doc, SaveType.OpenInWord, Response); //保存為doc,并打開

是不是很簡單?好了,下面我們來看看文章開頭所講的如何動態(tài)生成word表格。

Aspose.Words對word文檔對象中的操作。在生成表格上有點(diǎn)類似二維數(shù)組。還記得需求說的“表格列數(shù)由用戶控制嗎”,所以我們要在模板上定義一個含有表頭的表格,這里要畫出您數(shù)據(jù)表中可以顯示的所有列頭,這樣做主要是考慮到用戶可以自己去減少不需要顯示列頭。這里要注意,書簽和列頭文字的順序不能顛倒,大家看下面代碼就知道了。如下圖:

灰色的部分就是bookmark了。Aspose.Words生成表格的原理就如同一個二維數(shù)組,也就是一個個單元格的去生成。我們來看看代碼部分是如何實(shí)現(xiàn)的:
復(fù)制代碼 代碼如下:

DocumentBuilder builder = new DocumentBuilder(doc);
DataTable products = this.GetData(); //數(shù)據(jù)源
int count = 0;
//記錄要顯示多少列
for (var i = 0; i < products.Columns.Count; i++)
{
if (doc.Range.Bookmarks[products.Columns[i].ColumnName.Trim()] != null)
{
Bookmark mark = doc.Range.Bookmarks[products.Columns[i].ColumnName.Trim()];
mark.Text = "";
count++;
}
}
System.Collections.Generic.List<string> listcolumn = new System.Collections.Generic.List<string>(count);
for (var i = 0; i < count; i++)
{
builder.MoveToCell(0, 0, i, 0); //移動單元格
if (builder.CurrentNode.NodeType == NodeType.BookmarkStart)
{
listcolumn.Add((builder.CurrentNode as BookmarkStart).Name);
}
}
double width = builder.CellFormat.Width;//獲取單元格寬度
builder.MoveToBookmark("table"); //開始添加值
for (var m = 0; m < products.Rows.Count; m++)
{
for (var i = 0; i < listcolumn.Count; i++)
{
builder.InsertCell(); // 添加一個單元格
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.Width = width;
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.Write(products.Rows[m][listcolumn[i]].ToString());
}
builder.EndRow();
}
doc.Range.Bookmarks["table"].Text = ""; // 清掉標(biāo)示
doc.Save("baojiadan.doc", SaveFormat.Doc, SaveType.OpenInWord, page.Response);


我們來看看最后生成的效果:

到這里我們這一部分的功能就已經(jīng)全部完成了。

也許這種方法并不是最好,如果朋友們有興趣不妨研究研究,大家一起交流下。

附:Aspose.Words for NET 6.5 破解版下載地址

相關(guān)文章

  • C# 命名規(guī)則(挺不錯的)

    C# 命名規(guī)則(挺不錯的)

    我自己總結(jié)的一套命名規(guī)則,其實(shí)規(guī)則很重要,它是一種標(biāo)準(zhǔn),可有可無,但有總會比無好,大家正在編碼的同志仔細(xì)看看,給點(diǎn)改進(jìn)意見。
    2009-02-02
  • 如何在.net6webapi中使用自動依賴注入

    如何在.net6webapi中使用自動依賴注入

    IOC/DI是一種設(shè)計模式,用于解耦組件之間的依賴關(guān)系,在傳統(tǒng)的編程模式中,組件之間的依賴關(guān)系是硬編碼在代碼中的,這樣會導(dǎo)致代碼的耦合度很高,難以維護(hù)和發(fā)展,這篇文章主要介紹了如何在.net6webapi中實(shí)現(xiàn)自動依賴注入,需要的朋友可以參考下
    2023-06-06
  • C#處理Json的另外一種方式成功實(shí)踐

    C#處理Json的另外一種方式成功實(shí)踐

    通過C#調(diào)用js,用Js解析Json,并將返回值轉(zhuǎn)換為C#數(shù)組,這種思路相信你沒有用過吧,試試也無妨啊,感興趣的你可千萬不要走開啊
    2013-01-01
  • asp.net 設(shè)置GridView的選中行

    asp.net 設(shè)置GridView的選中行

    當(dāng)點(diǎn)某行時,直接選中,然后移動方向鍵則切換不同的選中行; 如果直接按方向鍵,則從第一行開始標(biāo)識
    2009-04-04
  • asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法

    asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法

    這篇文章主要介紹了asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法,結(jié)合實(shí)例形式分析了ActionFilterAttribute過濾關(guān)鍵字的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • 管理員登錄設(shè)計(第7節(jié))

    管理員登錄設(shè)計(第7節(jié))

    這篇文章主要內(nèi)容是管理員登錄設(shè)計,通過設(shè)計了解命名空間的概念,掌握命名控件的的構(gòu)建和使用以及數(shù)據(jù)的讀操作,需要的朋友可以參考下
    2015-08-08
  • ASP.NET Core MVC中過濾器工作原理介紹

    ASP.NET Core MVC中過濾器工作原理介紹

    這篇文章介紹了ASP.NET Core MVC中過濾器的工作原理,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .NET命令行解析器示例程序(命令行選項(xiàng)功能)

    .NET命令行解析器示例程序(命令行選項(xiàng)功能)

    經(jīng)常需要開發(fā)一下小工具,之前都是自己解析命令行參數(shù),接觸過動態(tài)語言社區(qū)以后,發(fā)現(xiàn)命令行解析有特定的模式和框架可以利用,本文介紹一個.NET 平臺的類庫CommandLineParser
    2013-11-11
  • asp.net web大文件上傳帶進(jìn)度條實(shí)例代碼

    asp.net web大文件上傳帶進(jìn)度條實(shí)例代碼

    web 大文件上傳 帶進(jìn)度條
    2008-10-10
  • ASP.NET動態(tài)設(shè)置頁面標(biāo)題的方法詳解

    ASP.NET動態(tài)設(shè)置頁面標(biāo)題的方法詳解

    這篇文章介紹了ASP.NET動態(tài)設(shè)置頁面標(biāo)題的方法詳解,有需要的朋友可以參考一下
    2013-07-07

最新評論

化德县| 桃园市| 普宁市| 伊宁市| 万荣县| 浮梁县| 南投市| 迭部县| 双江| 金平| 长顺县| 邵阳市| 保山市| 垫江县| 江油市| 濮阳市| 江山市| 二连浩特市| 普格县| 镇宁| 庄浪县| 梁山县| 霸州市| 阿拉善盟| 江山市| 安陆市| 景泰县| 云南省| 定兴县| 巨野县| 于田县| 且末县| 泰顺县| 专栏| 南京市| 广饶县| 香河县| 陕西省| 大同市| 扎赉特旗| 桑日县|