国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

利用Aspose.Word控件實(shí)現(xiàn)Word文檔的操作

2020-01-24 03:15:42
字體:
供稿:網(wǎng)友
Aspose系列的控件,功能都挺好,之前一直在我的Winform開發(fā)框架中用Aspose.Cell來做報(bào)表輸出,可以實(shí)現(xiàn)多樣化的報(bào)表設(shè)計(jì)及輸出,由于一般輸出的內(nèi)容比較正規(guī)化或者多數(shù)是表格居多,所以一般使用Aspose.Cell來實(shí)現(xiàn)我想要的各種Excel報(bào)表輸出。雖然一直也知道Aspose.Word是用來生成Word文檔的,而且深信其也是一個(gè)很強(qiáng)大的控件,但一直沒用用到,所以就不是很熟悉。

偶然一次機(jī)會(huì),一個(gè)項(xiàng)目的報(bào)表功能指定需要導(dǎo)出為Word文檔,因此尋找了很多篇文章,不過多數(shù)介紹的比較簡單一點(diǎn),于是也參考了官方的幫助介紹,終于滿足了客戶的需求。下面我由淺入深來介紹這個(gè)控件在實(shí)際業(yè)務(wù)中的使用過程吧。

1、二維表格的Word操作
日常中,常見的內(nèi)容輸出就是二維表格的方式,表頭比較固定,內(nèi)容每行一條,那么在實(shí)際的使用控件我們?cè)撊绾尾僮髂?,其?shí)這個(gè)控件這方面介紹的文章很多,參考一下就能做出來了。其實(shí)介紹這個(gè)就是要說明書簽的重要性,這個(gè)在Aspose.Cell控件也是如此,書簽除了可以用來替換內(nèi)容,還可以用來標(biāo)記內(nèi)容輸入的開始位置等等功能。

首先我們?cè)谝粋€(gè)空白的Word文檔中繪制一個(gè)表格頭,然后再換行的開始插入一個(gè)標(biāo)簽引用,插入書簽有兩種方式,一種是在Word(2007、2010)的【插入】-【書簽】中插入制定位置的書簽引用,如下所示。

一種是在Word的自定義快速訪問工具欄上添加其他命令,如下步驟所示

前者插入的書簽是沒有文字或者特別的標(biāo)記,但是確實(shí)存在,后者會(huì)插入一個(gè)灰色塊作為占位符,如下所示,我這這個(gè)二維表格的例子里面使用后者進(jìn)行測試(兩者同等效果的)

這樣設(shè)計(jì)好Word模板后,下一步就是如何利用代碼生成二維表格了。首先這里提示一下,就是我故意設(shè)置了每個(gè)表格單元格的寬度不同,所以也就要求生成的行要和頭部對(duì)應(yīng),所以表格生成每行之前,肯定要獲得對(duì)應(yīng)列的樣式屬性的,否則就會(huì)對(duì)應(yīng)不上了。下面看代碼。

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

try
                {
                    Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);
                    Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);

                    DataTable nameList = DataTableHelper.CreateTable("編號(hào),姓名,時(shí)間");
                    DataRow row = null;
                    for (int i = 0; i < 50; i++)
                    {
                        row = nameList.NewRow();
                        row["編號(hào)"] = i.ToString().PadLeft(4, '0');
                        row["姓名"] = "伍華聰 " + i.ToString();
                        row["時(shí)間"] = DateTime.Now.ToString();
                        nameList.Rows.Add(row);
                    }

                    List<double> widthList = new List<double>();
                    for (int i = 0; i < nameList.Columns.Count; i++)
                    {
                        builder.MoveToCell(0, 0, i, 0); //移動(dòng)單元格
                        double width = builder.CellFormat.Width;//獲取單元格寬度
                        widthList.Add(width);
                    }                   

                    builder.MoveToBookmark("table");        //開始添加值
                    for (var i = 0; i < nameList.Rows.Count; i++)
                    {
                        for (var j = 0; j < nameList.Columns.Count; j++)
                        {
                            builder.InsertCell();// 添加一個(gè)單元格                   
                            builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                            builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                            builder.CellFormat.Width = widthList[j];
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中對(duì)齊
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中對(duì)齊
                            builder.Write(nameList.Rows[i][j].ToString());
                        }
                        builder.EndRow();
                    }
                    doc.Range.Bookmarks["table"].Text = "";    // 清掉標(biāo)示 

                    doc.Save(saveDocFile);
                    if (MessageUtil.ShowYesNoAndTips("保存成功,是否打開文件?") == System.Windows.Forms.DialogResult.Yes)
                    {
                        System.Diagnostics.Process.Start(saveDocFile);
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                    MessageUtil.ShowError(ex.Message);
                    return;
                }



以上代碼的步驟就是
1)創(chuàng)建Aspose.Words.Document 和 Aspose.Words.DocumentBuilder對(duì)象,然后生成數(shù)據(jù)的二維表格內(nèi)容。
2)遍歷模板表格,或者每一列的寬度,以備后用。
3)移動(dòng)到表格的書簽位置,然后開始錄入數(shù)據(jù),Word表格的每個(gè)Cell都要求制定樣式和寬度,這樣才能和表格頭部吻合。
4)保存文件內(nèi)容到新的文件里面即可。
輸出的效果如下所示。

2、單元格合并的操作

常見的Word文件或者Excel文件中,都經(jīng)??吹胶喜卧竦膬?nèi)容,因此這個(gè)部分也是非常常見的操作,必須掌握。

我們先看一個(gè)例子代碼及效果。

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

try
                {
                    Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);
                    Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);

                    builder.InsertCell();
                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                    builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                    builder.CellFormat.VerticalMerge = CellMerge.First;
                    builder.Write("Text in merged cells.");

                    builder.InsertCell();
                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                    builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                    builder.CellFormat.VerticalMerge = CellMerge.None;
                    builder.Write("Text in one cell");
                    builder.EndRow();

                    builder.InsertCell();
                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                    builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                    // This cell is vertically merged to the cell above and should be empty.
                    builder.CellFormat.VerticalMerge = CellMerge.Previous;

                    builder.InsertCell();
                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                    builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                    builder.CellFormat.VerticalMerge = CellMerge.None;
                    builder.Write("Text in another cell");
                    builder.EndRow();

                    doc.Save(saveDocFile);
                    if (MessageUtil.ShowYesNoAndTips("保存成功,是否打開文件?") == System.Windows.Forms.DialogResult.Yes)
                    {
                        System.Diagnostics.Process.Start(saveDocFile);
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                    MessageUtil.ShowError(ex.Message);
                    return;
                }

他的效果如下

關(guān)于合并單元格的介紹,你還可以參考下這篇官方介紹:http://www.aspose.com/docs/display/wordsnet/Working+with+Merged+Cells

如果上面的例子還不夠明白,OK,我在介紹一個(gè)實(shí)際的例子,來說明合并單元格的操作模式。

實(shí)際文檔生成如下所示:

文檔的模板如下所示:

其實(shí)這個(gè)里面的“測試”內(nèi)容是使用代碼寫入的,其實(shí)就是一行業(yè)務(wù)數(shù)據(jù),用兩行來展示,其中有些合并的單元格,這是一個(gè)實(shí)際項(xiàng)目的表格形式。我們注意到,每行有13個(gè)單元格,其中第一、第二、第十三列是合并列。和并列有一個(gè)特點(diǎn),就是它的兩個(gè)索引都有效,不過只是能使用第一個(gè)索引來對(duì)它進(jìn)行操作復(fù)制,利用第二個(gè)沒有用處的。

如第一個(gè)列是和并列,它應(yīng)該有0、13這樣的索引,第二列也是和并列,它也有1、14的索引,其他的類推。

了解這樣的邏輯關(guān)系后,我們看實(shí)際操作的代碼如下所示。

撰寫人:伍華聰

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄大仙区| 阿拉善盟| 连州市| 拉孜县| 遵化市| 墨玉县| 武平县| 闵行区| 清远市| 府谷县| 虞城县| 嘉义县| 佛冈县| 神池县| 兰西县| 勐海县| 商南县| 年辖:市辖区| 盐城市| 滕州市| 泗洪县| 晋中市| 镇远县| 水城县| 夏津县| 屯门区| 溧阳市| 海晏县| 华容县| 车致| 民权县| 金门县| 湘潭县| 紫阳县| 楚雄市| 沅江市| 红河县| 田阳县| 曲麻莱县| 利津县| 十堰市|