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文档为单个文档。

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

 

生成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
<stringstring> 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, 
falsefalse);
                
while (document.GetText().IndexOf(rd.Key) != -1)
                    document.Replace(rd.Key, rd.Value, 
falsefalse);
            }
            document.Save(newFileName, FormatType.Doc);
        }

 

给文档加密码保护
        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;
        }

 

在书签位置创建一个表格
        public static IWTable ReplaceTable(WordDocument document, string bookmarkName, DataTable data, string mergeColName , List<List<string>> mutilTableCaption)
        {
            
if (document == nullthrow new ArgumentNullException("document");
            
if (bookmarkName == nullthrow new ArgumentNullException("bookmarkName");
            
if (data == nullthrow new ArgumentNullException("data");
            
if (data.Columns.Count < 1throw 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;
        }

 

posted @ 2010-02-04 09:36  suifei  阅读(3262)  评论(5编辑  收藏  举报