亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

利用Aspose.Word控件實現Word文檔的操作

2020-01-24 03:15:42
字體:
來源:轉載
供稿:網友
Aspose系列的控件,功能都挺好,之前一直在我的Winform開發框架中用Aspose.Cell來做報表輸出,可以實現多樣化的報表設計及輸出,由于一般輸出的內容比較正規化或者多數是表格居多,所以一般使用Aspose.Cell來實現我想要的各種Excel報表輸出。雖然一直也知道Aspose.Word是用來生成Word文檔的,而且深信其也是一個很強大的控件,但一直沒用用到,所以就不是很熟悉。

偶然一次機會,一個項目的報表功能指定需要導出為Word文檔,因此尋找了很多篇文章,不過多數介紹的比較簡單一點,于是也參考了官方的幫助介紹,終于滿足了客戶的需求。下面我由淺入深來介紹這個控件在實際業務中的使用過程吧。

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

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

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

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

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

復制代碼 代碼如下:

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

                    DataTable nameList = DataTableHelper.CreateTable("編號,姓名,時間");
                    DataRow row = null;
                    for (int i = 0; i < 50; i++)
                    {
                        row = nameList.NewRow();
                        row["編號"] = i.ToString().PadLeft(4, '0');
                        row["姓名"] = "伍華聰 " + i.ToString();
                        row["時間"] = 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); //移動單元格
                        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();// 添加一個單元格                   
                            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;//垂直居中對齊
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中對齊
                            builder.Write(nameList.Rows[i][j].ToString());
                        }
                        builder.EndRow();
                    }
                    doc.Range.Bookmarks["table"].Text = "";    // 清掉標示 

                    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)創建Aspose.Words.Document 和 Aspose.Words.DocumentBuilder對象,然后生成數據的二維表格內容。
2)遍歷模板表格,或者每一列的寬度,以備后用。
3)移動到表格的書簽位置,然后開始錄入數據,Word表格的每個Cell都要求制定樣式和寬度,這樣才能和表格頭部吻合。
4)保存文件內容到新的文件里面即可。
輸出的效果如下所示。

2、單元格合并的操作

常見的Word文件或者Excel文件中,都經常看到合并單元格的內容,因此這個部分也是非常常見的操作,必須掌握。

我們先看一個例子代碼及效果。

復制代碼 代碼如下:

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;
                }

他的效果如下

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

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

實際文檔生成如下所示:

文檔的模板如下所示:

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

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

了解這樣的邏輯關系后,我們看實際操作的代碼如下所示。

撰寫人:伍華聰

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费午夜电影| 亚洲人成电影在线观看天堂色| 91夜夜揉人人捏人人添红杏| 亚洲老司机av| 欧美日韩国产二区| 日韩成人在线电影网| 亚洲精品电影在线观看| 亚洲福利视频在线| 深夜福利一区二区| 久久久噜噜噜久久久| 亚洲精品电影网在线观看| 精品中文视频在线| 中文字幕无线精品亚洲乱码一区| 欧美性猛交xxxx偷拍洗澡| 亚洲国产古装精品网站| 欧美日韩一区二区免费视频| 日韩精品在线视频观看| 亚洲性线免费观看视频成熟| 国产综合香蕉五月婷在线| 97视频com| 国产ts人妖一区二区三区| 国产免费观看久久黄| 黄色91在线观看| 日韩欧美亚洲范冰冰与中字| 欧美激情精品久久久久久久变态| 91成品人片a无限观看| 国产亚洲人成a一在线v站| 日韩精品中文字| 日韩a**站在线观看| 4438全国成人免费| 久久精品国产亚洲一区二区| 亚洲成人在线视频播放| 欧美性生交xxxxxdddd| 欧美激情亚洲另类| 日韩视频精品在线| 成人福利免费观看| 成人性生交大片免费看视频直播| 一区二区国产精品视频| 亚洲激情视频在线播放| 欧美日韩在线视频一区二区| 久久视频在线看| 日韩欧美精品在线观看| 久久精品视频播放| 亚洲精品美女久久久| 粉嫩老牛aⅴ一区二区三区| 色99之美女主播在线视频| 久久人人爽人人爽人人片av高清| 亚洲奶大毛多的老太婆| 日韩精品久久久久久久玫瑰园| 久久91亚洲人成电影网站| 日韩国产在线播放| 欧美激情精品久久久久久黑人| 国产一区二区三区视频在线观看| 日韩中文字幕免费视频| 亚洲免费影视第一页| 久久亚洲精品中文字幕冲田杏梨| 麻豆国产va免费精品高清在线| 国产亚洲成精品久久| 丝袜美腿亚洲一区二区| 国产欧美精品日韩| 日韩视频在线一区| 国产成人精品免高潮费视频| 韩国福利视频一区| 国产精品久久久久久亚洲调教| 深夜福利91大全| 色视频www在线播放国产成人| 精品人伦一区二区三区蜜桃免费| 国产精品第七十二页| 欧美午夜激情在线| 亚洲深夜福利视频| 欧洲亚洲在线视频| 久久久亚洲欧洲日产国码aⅴ| 日韩久久精品电影| 在线一区二区日韩| 国产欧美日韩免费看aⅴ视频| 欧美性猛交xxxx久久久| 91av在线看| 久热精品视频在线观看| 久久久伊人欧美| 国产一区二区三区在线免费观看| 在线a欧美视频| 日韩成人小视频| 久久精品一区中文字幕| 中文字幕久精品免费视频| 久久这里有精品| 国模精品视频一区二区三区| 国产69精品99久久久久久宅男| 成人激情电影一区二区| 97在线视频免费看| 中文国产成人精品久久一| 日韩av在线网站| 欧美精品久久久久久久久| 色综合天天狠天天透天天伊人| 国产精品日日摸夜夜添夜夜av| 欧美人与性动交a欧美精品| 精品视频在线播放色网色视频| 亚洲一区中文字幕| 欧美综合激情网| 国产精品视频资源| 91亚洲永久免费精品| 国产精品成人免费电影| 亚洲视频欧洲视频| 国产成人av在线播放| 91po在线观看91精品国产性色| 亚洲激情国产精品| 欧美日韩亚洲一区二区三区| 成人精品久久一区二区三区| 久久精品国产成人精品| 日韩成人av网| 亚洲欧美激情一区| 成人春色激情网| 日韩中文字幕网址| 欧美孕妇毛茸茸xxxx| 欧美丰满少妇xxxx| 欧美在线观看日本一区| 欧美性精品220| 欧洲成人性视频| 日韩亚洲欧美中文在线| 一区二区三区国产在线观看| 国产精品久久久久99| 欧美视频二区36p| 91免费版网站入口| 亚洲成人精品久久久| 国产一区二区三区在线免费观看| 日韩在线视频观看正片免费网站| 日韩欧美在线观看| 亚洲精品一区中文| 亚洲国产精品久久| 国内精品久久久久| 欧美午夜片欧美片在线观看| 日韩一区二区av| 国产精品麻豆va在线播放| 欧美性69xxxx肥| 7m第一福利500精品视频| 亚洲男人第一av网站| 国产在线观看不卡| 国内精品久久久久久久| 最近2019年手机中文字幕| 欧美成人性生活| 欧美一级黄色网| 一本大道久久加勒比香蕉| 亚洲国内精品视频| 欧美精品在线免费观看| 日韩欧美在线一区| 欧美高跟鞋交xxxxxhd| 国产精品美女午夜av| 亚洲人成网在线播放| 亚洲激情在线观看视频免费| 亚洲女性裸体视频| 一本大道香蕉久在线播放29| 一区二区三区视频免费| 亚洲欧美日韩精品久久奇米色影视| 久久色精品视频| 自拍偷拍亚洲欧美| 欧美精品一区在线播放| 久久久久久久久久久人体| 国产日韩在线免费| 91夜夜未满十八勿入爽爽影院| 97碰在线观看| 国产精品一香蕉国产线看观看| 国产成人综合精品| 91精品国产91久久久久久不卡| 亚洲一区二区国产| 欧美—级a级欧美特级ar全黄|