亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C#通過模板導出Word(文字,表格,圖片)

系統 2206 0

  C#導出Word,Excel的方法有很多,這次因為公司的業務需求,需要導出內容豐富(文字,表格,圖片)的報告,以前的方法不好使,所以尋找新的導出方法,在網上找到了通過模板文件導出Word的方法,記錄一下過程.

一:模板的創建 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

  通過模板導出,肯定需要先創建模板,然后顧名思義就是將模板中提前設置好的占位符,通過程序替換為想輸出的內容即可;

新建word文件(必須為docx或者dotx文件),放在程序根目錄下,在需要位置 插入-文檔部件-域,

域名 :MacroButton
宏名 :DoFieldClick
顯示文字 :這個自己設置,為了與模板其他文字區分,可以用"[]"括起來.
  需要多少替換內容,添加多少域即可.

C#通過模板導出Word(文字,表格,圖片)

二:添加項目 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

  在解決方案中添加項目WordMLHelper,在原項目中添加對WordMLHelper的引用后可以直接調用.
  WordMLHelper代碼地址:http://url.cn/U8VNul

三:調用方法 ? ? ? ? ? ? ? ? ? ? ?

  首先確定模板文件位置和導出文件的生成路徑.

?

      
        private
      
      
        string
      
       mubanFile = 
      
        "
      
      
        muban.docx
      
      
        "
      
      
        ;

        
      
      
        private
      
      
        string
      
       outputPath = 
      
        @"
      
      
        C:\Users\zz\Desktop\test1.docx
      
      
        "
      
      ;
    

?

  1.打開模板文件,獲取所有填充域

        
          1
        
        
          string
        
         templatePath =
        
           Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory


        
        
          2
        
        
                          , mubanFile);


        
        
          3
        
                     List<TagInfo> tagInfos = wordMLHelper.GetAllTagInfo(File.OpenRead(templatePath));
      
View Code

  2.遍歷所有填充域,替換填充域內容

  鎖定填充域的話,有兩種方法,一是根據填充域的提示文字,如"[文字]",二是根據填充域的索引,如if(tagInfos[i].Seq==2),則是找到索引為2的填充域

        
           1
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < tagInfos.Count; i++
        
          )


        
        
           2
        
        
                      {


        
        
           3
        
        
          //
        
        
          填充域有兩種類型,1:段落或圖片,2:表格


        
        
           4
        
        
          //
        
        
          對填充域填充時需先判斷填充域類型
        
        
           5
        
        
          if
        
         (tagInfos[i].Tbl == 
        
          null
        
        
          )


        
        
           6
        
        
                          {


        
        
           7
        
        
          if
        
         (
        
          string
        
        .Equals(tagInfos[i].TagTips.Trim(), 
        
          "
        
        
          [文字]
        
        
          "
        
        
          ))


        
        
           8
        
        
                              {


        
        
           9
        
                                 TxtInfo txtInfo = 
        
          new
        
        
           TxtInfo();


        
        
          10
        
                                 txtInfo.Content = 
        
          "
        
        
          已經成功替換
        
        
          "
        
        
          ;


        
        
          11
        
                                 txtInfo.ForeColor = 
        
          "
        
        
          00ff00
        
        
          "
        
        
          ;


        
        
          12
        
        
          //
        
        
          txtInfo.HightLight = HighlightColor.Blue;
        
        
          13
        
        
                                  tagInfos[i].AddContent(txtInfo);


        
        
          14
        
        
                              }


        
        
          15
        
        
          if
        
         (
        
          string
        
        .Equals(tagInfos[i].TagTips.Trim(), 
        
          "
        
        
          [圖片]
        
        
          "
        
        
          ))


        
        
          16
        
        
                              {


        
        
          17
        
                                 ImgInfo imgInfo = 
        
          new
        
        
           ImgInfo();


        
        
          18
        
                                 imgInfo.ImgPath =
        
           Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory


        
        
          19
        
                                     , 
        
          "
        
        
          ./image/a1.jpg
        
        
          "
        
        
          );


        
        
          20
        
                                 imgInfo.Width = 
        
          200
        
        
          ;


        
        
          21
        
                                 imgInfo.Height = 
        
          200
        
        
          ;


        
        
          22
        
        
                                  tagInfos[i].AddContent(imgInfo);


        
        
          23
        
        
                              }


        
        
          24
        
        
                          }


        
        
          25
        
        
          else
        
        
          26
        
        
                          {


        
        
          27
        
                             TableStructureInfo tblInfo =
        
           tagInfos[i].Tbl;


        
        
          28
        
        
          if
        
         (tagInfos[i].Seq==
        
          2
        
        
          )


        
        
          29
        
        
                              {


        
        
          30
        
        
          for
        
         (
        
          int
        
         j = 
        
          0
        
        ; j < 
        
          3
        
        ; j++
        
          )


        
        
          31
        
        
                                  {


        
        
          32
        
                                     RowStructureInfo row = 
        
          new
        
        
           RowStructureInfo();


        
        
          33
        
        
          34
        
        
          for
        
         (
        
          int
        
         k = 
        
          0
        
        ; k < 
        
          3
        
        ; k++
        
          )


        
        
          35
        
        
                                      {


        
        
          36
        
                                         CellStructureInfo cell = 
        
          new
        
        
           CellStructureInfo();


        
        
          37
        
                                         TxtInfo txtInfo = 
        
          new
        
        
           TxtInfo();


        
        
          38
        
                                         txtInfo.Content = 
        
          "
        
        
        
          "
        
         + (j + 
        
          1
        
        ) + 
        
          "
        
        
          行,第
        
        
          "
        
         + (k + 
        
          1
        
        ) + 
        
          "
        
        
        
          "
        
        
          ;


        
        
          39
        
                                         txtInfo.Size = 
        
          25
        
        
          ;


        
        
          40
        
                                         txtInfo.ForeColor = 
        
          "
        
        
          0000ff
        
        
          "
        
        
          ;


        
        
          41
        
        
                                          cell.AddContentLine(txtInfo);


        
        
          42
        
        
                                          row.AddCell(cell);


        
        
          43
        
        
                                      }


        
        
          44
        
        
                                      tblInfo.AddRow(row);


        
        
          45
        
        
                                  }


        
        
          46
        
        
                              }


        
        
          47
        
        
          48
        
        
                          }


        
        
          49
        
                     }
      
View Code

  3.保存文件

        
           1
        
        
          if
        
         (!
        
          string
        
        
          .IsNullOrEmpty(outputPath))


        
        
           2
        
        
                      {


        
        
           3
        
                         templatePath =
        
           Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory


        
        
           4
        
        
                             , mubanFile);


        
        
           5
        
        
                          wordMLHelper.GenerateWordDocument(File.OpenRead(templatePath)


        
        
           6
        
        
                              , outputPath


        
        
           7
        
        
                              , tagInfos);


        
        
           8
        
        
           9
        
                         Assistance.RemoveAllTmpFile();
        
          //
        
        
           刪除所有臨時文件


        
        
          10
        
        
          //
        
        
          Response.Redirect(Request.Url.AbsoluteUri);
        
        
          11
        
                     }
      
View Code

四:完成 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  調用方法很簡單,隨著模板的修改,可以快速生成需要格式多樣內容豐富的Word文檔,感謝您的閱讀與評論.

?

五:補充 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

引用WordMLHelper.dll。?
1.調用WordMLHelper的GetAllTagInfo方法(只接受后綴為.docx和.dotx的模板文件路徑)獲取word標準模板的填充域集合List<TagInfo>;?
2.填充域對象(TagInfo)的Tbl屬性(類型為TblStructureInfo)表示表格單元格類型的填充域對象(默認值為null代表該填充域非表格單元格類型),可通過Tbl[rowIndex,cellIndex]的方式獲取表格的單元格,并調用單元格(CellStructureInfo)的AddContent和AddContentLine(填充內容后換行)方法填充文本和圖片;?
3.Tbl屬性的TblType變量表示該表格是僅含水平表頭(HORIZONTAL_HEADER)還是含水平和垂直表頭(HORIZONTAL_VERTICAL_HEADER)。?
4.根據需要將文本(TxtInfo對象)、圖片(ImgInfo對象)和表格(TblInfo對象)通過調用填充域(TagInfo對象)的AddContent和AddContentLine(填充內容后換行)方法填充到填充域中。?
5.TxtInfo、ImgInfo和TblInfo類中含高度、寬度等樣式屬性。?
6.若填充內容為不含樣式的純文本內容,則可通過WordMLHelper中的FillContentWithoutStyle方法將文本信息填充至填充域。?
7.若要將不含樣式的純文本內容填充到表格單元格類型(僅含水平表頭)的填充域,則可調用WordMLHelper中的FillContentToTable(TagInfo tagInfo, DataTable dt)。?
8.若要生成不含樣式的純文本內容的表格,則可調用WordMLHelper中的FillContentToTable(TagInfo tagInfo, DataTable dt)。?
9.調用WordMLHelper的GenerateWordDocument方法即可生成word文檔。

接口

WordMLHelper:操作模板類?
方法如下:?
GetAllTagInfo:獲取模板填充域及附加信息?
FillContentToTable:快速填充、生成純文本表格?
FillContentWithoutStyle:快速填充純文本內容到填充域?
GenerateWordDocument:根據模板生成word文檔?

TagInfo:填充域類?
屬性如下:?
Seq:填充域的序號?
TagTips:填充域的提示信息?
Tbl:表格單元格填充域類型對象(默認為null,表示非表格單元格填充域類型)?

TxtInfo:文本類型填充內容類?
屬性如下:?
Size:字體大小?
ForeColor: 字體顏色?
HightLight: 背景色(高亮)?
FontFamily: 字體?
Content: 文本內容?

ImgInfo:圖片類型填充內容類?
屬性如下:?
Width: 圖片寬度?
Height: 圖片高度?
ImgPath: 圖片路徑?

TblInfo:表格類型填充內容類?
屬性如下:?
Width: 表格寬度?
Rows: 行集合?
方法如下:?
AddRow: 填充行?

RowInfo: 表格類型填充內容的表格行類?
屬性如下:?
Cells: 單元格?
方法如下:?
AddCell: 填充單元格?

CellInfo: 表格類型填充內容的單元格類?
屬性如下:?
Width: 單元格寬度?
ColSpan: 列合并數(默認為1)?
RowSpan: 行合并數(默認為1)?
方法如下:?
AddContent: 添加填充內容?
AddContentLine: 添加填充內容并換行?

TableStructureInfo: 表格單元格類型的填充域類?
屬性如下:?
TblType: TblType枚舉類型,表示表格是僅含水平表頭還是含水平和垂直表頭?
Rows: 行集合?
方法如下:?
AddRow: 填充行?

RowStructureInfo: 表格單元格類型的填充域的表格行類?
屬性如下:?
Index: 該行在模板表格中的行索引(只讀)?
Cells: 單元格集合?
方法如下:?
AddCell: 添加單元格?

CellStructureInfo: 表格單元格類型的填充域的單元格類?
屬性如下:?
Index: wordML中的列索引(大于或等于該單元格實體在行實體中的索引值)(只讀)?
ColSpan: 合并列數目(默認為1,即是不合并)(只讀)?
RowSpan: 合并行數目(默認為1,即是不合并)(只讀)?
Tips: 單元格中的提示內容(只讀)?
IsTemplate: 該單元格是否可填寫(只讀)?
方法如下:?
AddContent: 添加填充內容?
AddContentLine: 添加填充內容并換行?

?

C#通過模板導出Word(文字,表格,圖片)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国内 | 国产在线一91区免费国产91 | 久久一精品 | 香蕉一级视频 | 日韩在线一区二区三区视频 | 久久精品国产亚洲欧美 | 久久久久久久亚洲精品 | 中文字幕在线观看亚洲日韩 | 丁香婷婷影音先锋5566 | 国产成人亚洲综合无 | 在线观看国产一区二三区 | 久久精品国产亚洲精品 | 欧美极品福利视频在线播放 | 亚洲视频一区在线观看 | 午夜大片免费男女爽爽影院久久 | 99精品视频在线在线视频观看 | 精品久久久久久中文字幕2017 | 久久国产精品只做精品 | 日本成人毛片 | 久久香蕉国产 | 午夜国产精品理论片久久影院 | japanese成人| 久久久亚洲欧美综合 | 青草青青在线视频观看 | 韩国日本美国免费毛片 | 国产成人精品一区二区三区 | 一区二区在线 | 伊人午夜| 国产真实强j视频在线观看 国产真实偷乱视频在线观看 | 999久久精品国产 | 午夜久久久久久网站 | 第一序列番外篇在哪里看 | jazz欧美人免费xxxxxx | 欧美日韩亚洲一区二区三区 | 色综合色狠狠天天综合色 | 国产在视频线精品www666 | 国产精品久久久一区二区三区 | 成人小视频在线 | 一级特黄女人生活片 | 欧美毛片aaaaa片久久久久 | 久月婷婷 |