Syncfusion Essential DocIO操作word文件实用函数

Essential DocIO

.NET库,能够读写Microsoft Word文件。该组件是一个对象模型,同Microsoft Office COM类库相似,它不采用COM interop,以C#编写。如果系统内没有安装Microsoft Word,可以考虑该组件。

创建新的MS Word文档:支持创建包含文本、图片、图表、页面和页脚的MS Word文档。

文档格式化:支持格式化为通用的MS Word 报告。

文档生成基于模板:基于模板生成文档,可以使用MS Word GUI设计文档报告,然后使用DocIO向模板文件内动态填充数据。

文档属性:读写Word文档的属性设置。

转换:支持使用Essential PDF将MS Word文档转换为PDF。

高级特性:支持复制和合并多个MS Word文档为单个文档。

ExpandedBlockStart.gif 转换HTML到word
         public   static   byte [] ConvertHtmlToDoc( string  html)
        {
            var document 
=   new  WordDocument();
            IWSection section 
=  document.AddSection();
            IWParagraph para 
=  section.AddParagraph();
            
            
string  errorMessage  =   "" ;
            
bool  valid  =  section.Body.IsValidXHTML(html, XHTMLValidationType.Strict,  out  errorMessage);
            
if  ( ! valid)
                
throw   new  InvalidCastException(errorMessage  +   " <hr> "   +  html) ;
            document.XHTMLValidateOption 
=  XHTMLValidationType.Strict;
            section.Body.InsertXHTML(html);
            var outMem 
=   new  MemoryStream();

            document.Save(outMem, FormatType.Doc);
            outMem.Seek(
0 , SeekOrigin.Begin);
            var content 
=   new   byte [outMem.Length];
            outMem.Read(content, 
0 , content.Length);
            outMem.Dispose();
            document.Close();
            
return  content;
        }

 

ExpandedBlockStart.gif 生成Word的时候替换指定的文字
         ///   <summary>
        
///  生成Word的时候替换指定的文字
        
///   </summary>
        
///   <param name="templatePath"></param>
        
///   <param name="FileName"></param>
        
///   <param name="replaysDictionary"></param>
         public   static   void  ReplaceDocContent( string  templateFileName,  string  newFileName,
                                             Dictionary
< string string >  replaysDictionary)
        {
            IWordDocument document 
=   new  WordDocument();
            document.Open(templateFileName, FormatType.Doc);
            
foreach  (var rd  in  replaysDictionary)
            {
                
if  ( string .IsNullOrEmpty(document.GetText()))  continue ;

                document.Replace(rd.Key, rd.Value, 
false false );
                
while  (document.GetText().IndexOf(rd.Key)  !=   - 1 )
                    document.Replace(rd.Key, rd.Value, 
false false );
            }
            document.Save(newFileName, FormatType.Doc);
        }

 

ExpandedBlockStart.gif 给文档加密码保护
         public   static  Stream SetDocProtect( byte [] docContent,  string  key)
        {
            var mem 
=   new  MemoryStream(docContent);
            mem.Seek(
0 , SeekOrigin.Begin);

            IWordDocument document 
=   new  WordDocument(mem, FormatType.Automatic);
            document.Protect(ProtectionType.AllowOnlyFormFields, key);
            var outMem 
=   new  MemoryStream();
            document.Save(outMem, FormatType.Doc);
            outMem.Seek(
0 , SeekOrigin.Begin);
            
return  outMem;
        }

 

ExpandedBlockStart.gif 在书签位置创建一个表格
         public   static  IWTable ReplaceTable(WordDocument document,  string  bookmarkName, DataTable data,  string  mergeColName , List < List < string >>  mutilTableCaption)
        {
            
if  (document  ==   null throw   new  ArgumentNullException( " document " );
            
if  (bookmarkName  ==   null throw   new  ArgumentNullException( " bookmarkName " );
            
if  (data  ==   null throw   new  ArgumentNullException( " data " );
            
if  (data.Columns.Count  <   1 throw   new  ArgumentNullException( " data " );
            
            
int  captionCount  =  mutilTableCaption  !=   null   &&  mutilTableCaption.Count  >   0   ?  mutilTableCaption.Count :  1 ;
            WTable table 
=   new  WTable(document,  true );

            table.ResetCells(data.Rows.Count 
+  captionCount, data.Columns.Count);

            
for  (var colCount  =   0 ; colCount  <  captionCount; colCount ++ )
            {
                
for  (var col  =   0 ; col  <  data.Columns.Count; col ++ )
                {
                    var paragraph 
=  table.Rows[colCount].Cells[col].AddParagraph();

                    var caption 
=  data.Columns[col].ColumnName;
                    
if  (mutilTableCaption  !=   null   &&  mutilTableCaption.Count  >   0 )
                        caption 
=  mutilTableCaption[colCount][col];
                    var text 
=  paragraph.AppendText(caption);
                    paragraph.ParagraphFormat.HorizontalAlignment 
=  Syncfusion.DocIO.DLS.HorizontalAlignment.Center;
                    text.CharacterFormat.FontName 
=   " 宋体 " ;
                    text.CharacterFormat.Bold 
=   false ;
                    text.CharacterFormat.FontSize 
=   10.5f ;
                }
            }

            
for  (var row  =  captionCount; row  <=  data.Rows.Count; row ++ )
                
for  (var col  =   0 ; col  <  data.Columns.Count; col ++ )
                {
                    var paragraph 
=  table.Rows[row].Cells[col].AddParagraph();
                    var text 
=  paragraph.AppendText(data.Rows[row  -  captionCount][col]  +   "" );

                    text.CharacterFormat.FontName 
=   " 宋体 " ;
                    text.CharacterFormat.FontSize 
=  9f;
                    
double  val  =   0 ;
                    
if  ( double .TryParse(text.Text,  out  val))
                    {
                        text.Text 
=  Math.Round(val,  2 +   "" ;
                        
// align right
                        paragraph.ParagraphFormat.HorizontalAlignment  =  Syncfusion.DocIO.DLS.HorizontalAlignment.Right;
                        table.Rows[row].Cells[col].CellFormat.VerticalAlignment 
=  VerticalAlignment.Middle;
                        table.Rows[row].Cells[col].CellFormat.TextWrap 
=   false ;
                    }
                }
            
// 合并单元格,向下合并
             if  ( ! string .IsNullOrEmpty(mergeColName))
                
for  (var row  =  captionCount; row  <  table.Rows.Count; row ++ )
                {
                    var cell 
=  table.Rows[row].Cells[data.Columns[mergeColName].Ordinal];
                    cell.CellFormat.VerticalMerge 
=  CellMerge.Start;
                    var text 
=  data.Rows[row  -  captionCount][mergeColName]  +   "" ;
                    
if  (row  >  captionCount)
                    {
                        var priorCell 
=  table.Rows[row  -  captionCount].Cells[data.Columns[mergeColName].Ordinal];
                        var findText 
=  data.Rows[row  -  captionCount  -   1 ][mergeColName]  +   "" ;
                        
if  (text.Equals(findText))
                            cell.CellFormat.VerticalMerge 
=  CellMerge.Continue;
                    }
                }

            BookmarksNavigator bk 
=   new  BookmarksNavigator(document);
            bk.MoveToBookmark(bookmarkName);

            TextBodyPart body
=  bk.GetBookmarkContent();
            bk.DeleteBookmarkContent(
true );

            bk.InsertTable(table);
            
return  table;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值