using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml.Spreadsheet;
using System.IO;
using System.IO.Packaging;
using System.Xml;
using System.Xml.Linq; namespace OpenXmlOficeDemo
{ /// <summary>
///Open XML SDK 2.0 WORD https://msdn.microsoft.com/en-us/library/office/gg490656(v=office.14).aspx
///Open XML SDK 2.5 WORD https://msdn.microsoft.com/en-us/library/office/ff478541.aspx
/// </summary>
public partial class Form2 : Form
{ /// <summary>
///
/// </summary>
public Form2()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form2_Load(object sender, EventArgs e)
{ //打开文档添加表格
//string timeMark = DateTime.Now.ToString("yyyyMMddHHmmss");
//string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "全国民代课教师的信息收集模板" + ".docx"); // "geovindu" + timeMark
//WDAddTable(fileName, new string[,]
// {
// { "涂聚文", "Du" },
// { "Texas", "TX" },
// { "California", "CA" },
// { "New York", "NY" },
// { "New York", "NY" },
// { "Massachusetts", "MA" }
// }); }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// Change an existing property's value or create a new one with the supplied value
WDSetCustomProperty("C:\\demo.docx", "Completed",false, PropertyTypes.YesNo); // Change an existing property's value or create a new one with the supplied value
WDSetCustomProperty("C:\\demo.docx", "Completed",new DateTime(2008, 1, 1), PropertyTypes.DateTime); }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
string timeMark = DateTime.Now.ToString("yyyyMMddHHmmss");
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "geovindu" + timeMark + ".docx");
CreateWordDoc(fileName, "geovin", new string[,]
{
{ "涂聚文", "Du" },
{ "Texas", "TX" },
{ "California", "CA" },
{ "New York", "NY" },
{ "New York", "NY" },
{ "Massachusetts", "MA" }
}); }
/// <summary>
///
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static XElement WDRetrieveTOC(string fileName)
{
XElement TOC = null; using (var document = WordprocessingDocument.Open(fileName, false))
{
var docPart = document.MainDocumentPart;
var doc = docPart.Document; OpenXmlElement block = doc.Descendants<DocPartGallery>().
Where(b => b.Val.HasValue &&
(b.Val.Value == "Table of Contents")).FirstOrDefault(); if (block != null)
{
// Back up to the enclosing SdtBlock and return that XML.
while ((block != null) && (!(block is SdtBlock)))
{
block = block.Parent;
}
TOC = new XElement("TOC", block.OuterXml);
}
}
return TOC;
}
/// <summary>
/// 打开WORD添加表格WORD
/// Take the data from a 2-dimensional array and build a table at the
/// end of the supplied document.
/// </summary>
/// <param name="fileName"></param>
/// <param name="data"></param>
public static void WDAddTable(string fileName, string[,] data)
{ using (var document = WordprocessingDocument.Open(fileName, true))//WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document))
{ var doc = document.MainDocumentPart.Document; DocumentFormat.OpenXml.Wordprocessing.Table table = new DocumentFormat.OpenXml.Wordprocessing.Table(); TableProperties props = new TableProperties(
new TableBorders(
new DocumentFormat.OpenXml.Wordprocessing.TopBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new DocumentFormat.OpenXml.Wordprocessing.BottomBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new DocumentFormat.OpenXml.Wordprocessing.LeftBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new DocumentFormat.OpenXml.Wordprocessing.RightBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new InsideHorizontalBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new InsideVerticalBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
}));
table.AppendChild<TableProperties>(props); for (var i = 0; i <= data.GetUpperBound(0); i++)
{
var tr = new TableRow();
for (var j = 0; j <= data.GetUpperBound(1); j++)
{
var tc = new TableCell();
tc.Append(new Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.Text(data[i, j]))));
// Assume you want columns that are automatically sized.
tc.Append(new TableCellProperties(
new TableCellWidth { Type = TableWidthUnitValues.Auto }));
tr.Append(tc);
}
table.Append(tr);
}
doc.Body.Append(table);
doc.Save();
}
} /// <summary>
/// 创建WORD文档,添加表格
/// </summary>
/// <param name="filepath"></param>
/// <param name="msg"></param>
/// <param name="data"></param>
public static void CreateWordDoc(string filepath, string msg, string[,] data)
{
using (WordprocessingDocument doc = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
{
// Add a main document part.
MainDocumentPart mainPart = doc.AddMainDocumentPart();
// Create the document structure and add some text.
mainPart.Document = new Document();
Body body = new Body(); //
DocumentFormat.OpenXml.Wordprocessing.Table table = new DocumentFormat.OpenXml.Wordprocessing.Table();
TableProperties props = new TableProperties(
new TableBorders(
new DocumentFormat.OpenXml.Wordprocessing.TopBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new DocumentFormat.OpenXml.Wordprocessing.BottomBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new DocumentFormat.OpenXml.Wordprocessing.LeftBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new DocumentFormat.OpenXml.Wordprocessing.RightBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new InsideHorizontalBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new InsideVerticalBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
}));
table.AppendChild<TableProperties>(props); for (var i = 0; i <= data.GetUpperBound(0); i++)
{
var tr = new TableRow();
for (var j = 0; j <= data.GetUpperBound(1); j++)
{
var tc = new TableCell();
tc.Append(new Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.Text(data[i, j]))));
// Assume you want columns that are automatically sized.
tc.Append(new TableCellProperties(
new TableCellWidth { Type = TableWidthUnitValues.Auto }));
tr.Append(tc);
}
table.Append(tr);
} //appending table to body
body.Append(table);
// and body to the document
mainPart.Document.Append(body);
// Save changes to the main document part.
mainPart.Document.Save(); } } /// <summary>
/// Delete headers and footers from a document.
/// </summary>
/// <param name="docName"></param>
public static void WDRemoveHeadersFooters(string docName)
{
// Given a document name, remove all headers and footers.
using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(docName, true))
{
var docPart = wdDoc.MainDocumentPart;
if (docPart.HeaderParts.Count() > 0 || docPart.FooterParts.Count() > 0)
{
// Remove header and footer parts.
docPart.DeleteParts(docPart.HeaderParts);
docPart.DeleteParts(docPart.FooterParts); Document doc = docPart.Document; // Remove references to the headers and footers.
// This requires digging into the XML content
// of the document:
var headers =
doc.Descendants<HeaderReference>().ToList();
foreach (var header in headers)
{
header.Remove();
} var footers =
doc.Descendants<FooterReference>().ToList();
foreach (var footer in footers)
{
footer.Remove();
}
doc.Save();
}
}
}
/// <summary>
///
/// </summary>
/// <param name="filepath"></param>
/// <param name="txt"></param>
public static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
// Open a WordprocessingDocument for editing using the filepath.
WordprocessingDocument wordprocessingDocument =
WordprocessingDocument.Open(filepath, true); // Assign a reference to the existing document body.
Body body = wordprocessingDocument.MainDocumentPart.Document.Body; // Add new text.
Paragraph para = body.AppendChild(new Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text(txt)); // Close the handle explicitly.
wordprocessingDocument.Close();
}
/// <summary>
///
/// </summary>
/// <param name="filepath"></param>
/// <param name="msg"></param>
public static void CreateWordDoc(string filepath, string msg)
{
using (WordprocessingDocument doc = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
{
// Add a main document part.
MainDocumentPart mainPart = doc.AddMainDocumentPart(); // Create the document structure and add some text.
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run()); // String msg contains the text, "Hello, Word!"
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text(msg));
}
}
/// <summary>
///
/// </summary>
/// <param name="filepath"></param>
public static void OpenWordprocessingDocumentReadonly(string filepath)
{
// Open a WordprocessingDocument based on a filepath.
using (WordprocessingDocument wordDocument =
WordprocessingDocument.Open(filepath, false))
{
// Assign a reference to the existing document body.
Body body = wordDocument.MainDocumentPart.Document.Body; // Attempt to add some text.
Paragraph para = body.AppendChild(new Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text("Append text in body, but text is not saved - OpenWordprocessingDocumentReadonly")); // Call Save to generate an exception and show that access is read-only.
// wordDocument.MainDocumentPart.Document.Save();
}
}
/// <summary>
///
/// </summary>
/// <param name="filepath"></param>
public static void OpenWordprocessingPackageReadonly(string filepath)
{
// Open System.IO.Packaging.Package.
Package wordPackage = Package.Open(filepath, FileMode.Open, FileAccess.Read); // Open a WordprocessingDocument based on a package.
using (WordprocessingDocument wordDocument =
WordprocessingDocument.Open(wordPackage))
{
// Assign a reference to the existing document body.
Body body = wordDocument.MainDocumentPart.Document.Body; // Attempt to add some text.
Paragraph para = body.AppendChild(new Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text("Append text in body, but text is not saved - OpenWordprocessingPackageReadonly")); // Call Save to generate an exception and show that access is read-only.
// wordDocument.MainDocumentPart.Document.Save();
} // Close the package.
wordPackage.Close();
}
/// <summary>
///
/// </summary>
/// <param name="filepath"></param>
public static void CreateSpreadsheetWorkbook(string filepath)
{
// Create a spreadsheet document by supplying the filepath.
// By default, AutoSave = true, Editable = true, and Type = xlsx.
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook); // Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook(); // Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData()); // Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); // Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet); workbookpart.Workbook.Save(); // Close the document.
spreadsheetDocument.Close();
}

  

/// <summary>
///
/// </summary>
/// <param name="sourceFile"></param>
/// <param name="destinationFile"></param>
private void setWord(string sourceFile, string destinationFile)
{
File.Copy(sourceFile, destinationFile, true);
using (WordprocessingDocument document = WordprocessingDocument.Open(destinationFile, true))
{
// Change the document type to Document DocumentFormat.OpenXml.WordprocessingDocumentType // DocumentFormat.OpenXml.WordprocessingDocumentType doc = new WordprocessingDocumentType();
document.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
// Get the MainPart of the document
MainDocumentPart mainPart = document.MainDocumentPart;
// Get the Document Settings Part
DocumentSettingsPart documentSettingPart1 = mainPart.DocumentSettingsPart;
// Create a new attachedTemplate and specify a relationship ID
AttachedTemplate attachedTemplate1 = new AttachedTemplate() { Id = "relationId1" };
// Append the attached template to the DocumentSettingsPart
documentSettingPart1.Settings.Append(attachedTemplate1);
// Add an ExternalRelationShip of type AttachedTemplate.
// Specify the path of template and the relationship
documentSettingPart1.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate", new Uri(sourceFile, UriKind.Absolute), "relationId1"); // Get a list of bookmarks
IDictionary<String, BookmarkStart> bookmarkMap = new Dictionary<String, BookmarkStart>();
foreach (BookmarkStart bookmarkStart in mainPart.RootElement.Descendants<BookmarkStart>())
{
bookmarkMap[bookmarkStart.Name] = bookmarkStart;
}
// Make changes to bookmarks
foreach (BookmarkStart bookmarkStart in bookmarkMap.Values)
{
if (bookmarkStart.Name == "WorkOrderNo")
{
string WorkOrderNum = "WorkOrderNo";
DocumentFormat.OpenXml.Wordprocessing.Text text = new DocumentFormat.OpenXml.Wordprocessing.Text(WorkOrderNum);
DocumentFormat.OpenXml.Wordprocessing.FontSize WOFontSize = new DocumentFormat.OpenXml.Wordprocessing.FontSize();
WOFontSize.Val = "28";
DocumentFormat.OpenXml.Wordprocessing.Run run = new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.RunProperties(new DocumentFormat.OpenXml.Wordprocessing.Bold(), WOFontSize));
run.Append(text);
bookmarkStart.InsertAfterSelf(run);
}
else if (bookmarkStart.Name == "BillingCode")
{
string BillingCode = "BillingCode";
DocumentFormat.OpenXml.Wordprocessing.Text text = new DocumentFormat.OpenXml.Wordprocessing.Text(BillingCode);
DocumentFormat.OpenXml.Wordprocessing.FontSize WOFontSize = new DocumentFormat.OpenXml.Wordprocessing.FontSize();
WOFontSize.Val = "28";
DocumentFormat.OpenXml.Wordprocessing.Run run = new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.RunProperties(new DocumentFormat.OpenXml.Wordprocessing.Bold(), WOFontSize));
run.Append(text);
bookmarkStart.InsertAfterSelf(run);
}
}
// Save the document
mainPart.Document.Save();
}
}
/// <summary>
/// To search and replace content in a document part.
/// </summary>
/// <param name="document"></param>
/// <param name="dict"></param>
public static void SearchAndReplace(string document, Dictionary<string, string> dict)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
string docText = null;
using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
docText = sr.ReadToEnd();
} foreach (KeyValuePair<string, string> item in dict)
{
Regex regexText = new Regex(item.Key);
docText = regexText.Replace(docText, item.Value);
} using (StreamWriter sw = new StreamWriter(
wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
} }
}

  

Csharp: create word file using Open XML SDK 2.5的更多相关文章

  1. Csharp: read excel file using Open XML SDK 2.5

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. User Word Automation Services and Open XML SDK to generate word files in SharePoint2010

    SharePoint 2010 has established a new service called "Word Automation Services" to operate ...

  3. Embedding Documents in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office

    Download the sample code This visual how-to article presents a solution that creates a Word 2007 doc ...

  4. Open Xml SDK Word模板开发最佳实践(Best Practice)

    1.概述 由于前面的引文已经对Open Xml SDK做了一个简要的介绍. 这次来点实际的——Word模板操作. 从本质上来讲,本文的操作都是基于模板替换思想的,即,我们通过替换Word模板中指定元素 ...

  5. 下载和编译 Open XML SDK

    我们需要一些工具来开始 Open XML 的开发. 开发工具 推荐的开发工具是 Visual Studio 社区版. 开发工具:Visual Studio Community 2013 下载地址:ht ...

  6. 【转】Open XML SDK class structure

    Open XML SDK class structure March 27, 2012 by Vincent I’ve gotten a few questions on the class stru ...

  7. Open Xml SDK 引文

    什么是Open Xml SDK? 什么是Open Xml? 首先,我们得知道,Open Xml为何物? 我们还是给她起个名字——就叫 “开放Xml”,以方便我们中文的阅读习惯.之所以起开放这个名字,因 ...

  8. Open XML SDK 在线编程黑客松

    2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...

  9. C# Word转PDF/HTML/XML/XPS/SVG/EMF/EPUB/TIFF

    一款有着强大的文档转换功能的工具,无论何时何地都会是现代办公环境极为需要的.在本篇文章中,将介绍关于Word文档的转换功能(Word转XPS/SVG/EMF/EPUB/TIFF).希望方法中的代码能为 ...

随机推荐

  1. Windows Tomcat7.0 安装 Solr

    准备工作 1.下载Tomcat7.0 ,apache-tomcat-7.0.67.exe,安装目录如下:C:\workspace\Tomcat7.0\ 2.下载Solr 5.2,solr-5.2.0. ...

  2. neo4j安装与示例

    Neo4j有两种访问模式:服务器模式和嵌入模式参考,下面主要讲windows下这两种模式的配置与访问示例 1 Windows下Neo4j服务器模式安装与示例 安装: 1.下载Neo4j,我下载的版本是 ...

  3. makeimg

    >./simg2img [system.img] [system2.img]>mount -o loop [system2.img] [s/]>./make_ext4fs -s -l ...

  4. IE11兼容性设定

    增加browser文件,如下:  <browsers>   <browser refID="Default">     <capabilities&g ...

  5. 转战farbox

    好久没更新博客了,感觉在博客园这种技术为主的博客里面写太多东西写得太杂了,平时的阅读体验非常糟糕,我一直都是一个喜欢记录的人,以前经常有在笔记本上写日记的习惯,但是自从用了网上博客之后,好像就再也没有 ...

  6. 爬网页?--Chrome帮你计算XPath

    最近用HtmlUnit/HtmlCleaner爬网页,这两个工具都使用XPath来定位html元素.发现chrome竟然有算出XPath的功能! 打开一个网页,F12,在弹出的小窗口中选中一个标签,右 ...

  7. mysql 索引- 笔记

    索引 mysql最常用的索引结构是btree(O(log(n))),但是总有一些情况下我们为了更好的性能希望能使用别的类型的索引.hash就是其中一种选择,例如我们在通过用户名检索用户id的时候,他们 ...

  8. C#通过RFC调用SAP

    using System;using System.Collections.Generic;using SAP.Middleware.Connector;using System.Data;using ...

  9. 【转】Oracle RAC 环境下的连接管理

    文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1 ...

  10. 用x86的模拟器内核记得安装intel的haxm

    Android 模拟器一直以运行速度慢著称, 本文介绍使用 Intel HAXM 技术为 Android 模拟器加速, 使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题. Intel HAXM ( ...