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

王朝学院·作者佚名  2010-02-06
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

}

给文档加密码保护

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

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航