2009年9月28日,Apache POI项目发布了3.5版本,正式支持Office 2007中引入的OOXML格式,如DOCX和XLSX.
请提供一个代码示例,用于以纯文本格式提取DOCX文件的内容,忽略任何样式或格式.
我问这个是因为我无法找到任何覆盖新OOXML支持的Apache POI示例.
我需要一些东西作为占位符.我起初将内容控制视为一种解决方案,但我遇到了一些问题.
然后我考虑将.docx中的CustomXML添加到其中,但由于i4i的诉讼而拒绝了.
然后我决定通过OpenXML SDK 2.0简单地改变内容控制的文本,但即使它如此标记,内容控制也不会消失.我想它不知道文本发生了变化,除非它发生在单词内部.
我或许可以删除CC并放置文本,但我担心它可能带来的格式和样式问题,而且它会违反内容控制的目的.
然后我开始想知道我是否可以定义Word可以识别的自己的占位符.也许通过积木.它不需要做任何事情,除了易于使用OpenXML找到并以某种方式可标记,所以我知道用什么来替换它.我不确定可以用Building Blocks做什么,但我希望它能够做到.
不确定哪种解决方案最适合我,但我需要的是:
a)一些容易放在模板中的东西,也许是预定义的内容控件占位符,你可以放置在你想要的地方并按照你喜欢的样式.
b)添加数据后,删除所有占位符,不再修改.它保持在占位符中定义的样式/格式.
要收回,我需要回答
如何在OpenXML SDK中编辑内容控件,以便在添加文本后删除它们.
-要么-
我可以为Word文档定义自己的自定义OpenXML标记,然后我可以替换它吗?
如何使用带有OpenXML格式的 c#读取xls和xlsx文件而不使用OLEDB连接.我正在寻找Open XML格式程序.
下面是我使用OLEDB预处理的代码.但我正在寻找OpenXML格式.
public static DataTable ConvretExcelToDataTable(string FilePath)
{
string strConn = string.Empty;
if (FilePath.Trim().EndsWith(".xlsx"))
{
strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", FilePath);
}
else if (FilePath.Trim().EndsWith(".xls"))
{
strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", FilePath);
}
OleDbConnection conn = null;
OleDbCommand cmd = null;
OleDbDataAdapter da = null;
DataTable dt = new DataTable();
try
{
conn = new OleDbConnection(strConn);
conn.Open();
cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]", conn);
cmd.CommandType = CommandType.Text;
da = new OleDbDataAdapter(cmd); …Run Code Online (Sandbox Code Playgroud) 标题说明了我得到的错误.我试图使用OpenXml 隐藏 word doc中的所有文本.目前,当我尝试追加段落属性时,我收到上述错误.我在网上找不到这个错误.
返回错误的代码
using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(mDoc_copy, true))
{
// Manage namespaces to perform XPath queries.
NameTable nt = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
nsManager.AddNamespace("w", wordmlNamespace);
// Get the document part from the package.
// Load the XML in the document part into an XmlDocument instance.
XmlDocument xdoc = new XmlDocument(nt);
xdoc.Load(wdDoc.MainDocumentPart.GetStream());
MainDocumentPart main = wdDoc.MainDocumentPart;
IEnumerable<OpenXmlElement> elem = main.Document.Body.Descendants().ToList();
Paragraph p;
ParagraphProperties pp = new ParagraphProperties();
ParagraphMarkRunProperties prmp = new ParagraphMarkRunProperties();
Vanish v = …Run Code Online (Sandbox Code Playgroud) 我有一个程序,以Excel 2003 XML格式吐出Excel工作簿.它可以解决一个问题,我无法自动设置列宽.
我制作的片段:
<Table >
<Column ss:AutoFitWidth="1" ss:Width="2"/>
<Row ss:AutoFitHeight="0" ss:Height="14.55">
<Cell ss:StyleID="s62"><Data ss:Type="String">Database</Data></Cell>
Run Code Online (Sandbox Code Playgroud)
这不会将列设置为自动调整.我试过没有设置宽度,我尝试了很多东西而且我被卡住了.
谢谢.
我通过Microsoft Office OpenXML SDK 2.0更新Excel电子表格的一些单元格.更改值会使包含依赖于已更改单元格的公式的所有单元格无效.但是,由于缓存的值,Excel不会重新计算公式,即使用户单击"立即计算".
通过SDK使整个工作簿的所有依赖单元无效的最佳方法是什么?到目前为止,我在http://cdonner.com/introduction-to-microsofts-open-xml-format-sdk-20-with-a-focus-on-excel-documents.htm找到了以下代码片段:
public static void ClearAllValuesInSheet
(SpreadsheetDocument spreadSheet, string sheetName)
{
WorksheetPart worksheetPart =
GetWorksheetPartByName(spreadSheet, sheetName);
foreach (Row row in
worksheetPart.Worksheet.
GetFirstChild().Elements())
{
foreach (Cell cell in row.Elements())
{
if (cell.CellFormula != null &&
cell.CellValue != null)
{
cell.CellValue.Remove();
}
}
}
worksheetPart.Worksheet.Save();
}
Run Code Online (Sandbox Code Playgroud)
除了这个片段不能为我编译的事实,它有两个限制:
我正在寻找一种有效的方法(特别是,只会使依赖于某个单元格值的单元格无效),并考虑所有表格.
更新:
与此同时,我设法编译和运行代码,并删除工作簿的所有工作表上的缓存值.(参见答案.)我仍然对更好/替代解决方案感兴趣,特别是如何只删除实际依赖于更新单元格的单元格的缓存值.
我有一个有效的ASP.NET MVC Web应用程序来管理项目和客户.现在我想为一些客户生成一个word文件.在此文件中应显示有关客户的一些数据.每个生成的文件都应具有相同的数据和相同的设计.所以我想用字段来创建一个新的Word模板,并希望以编程方式填充占位符.
我的问题是我找不到明确的方法来做到这一点.有人知道一个好的学习资源吗?
我花了很多时间尝试使用OpenXML格式确定将.NET像素转换为Excel列宽的公式.我正在使用EPPlus生成xmls文档.我正在尝试确定要自动调整大小的列的宽度.我通过测量字符串然后尝试将其转换为OpenXML的列宽来获取像素数,这是用我认为的字符来衡量的.
我已经阅读了微软关于如何转换它的文档,并尝试了他们建议的公式,但它甚至不准确:
http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.column.aspx
这是我的代码使用他们的公式:
public double GetCharacterWidth(string Text, Font f, Graphics g)
{
float MaxDigitWidth = g.MeasureString("0", f).Width;
float Pixels = g.MeasureString(Text, f).Width;
return ((Pixels - 5) / MaxDigitWidth * 100 + 0.5) / 100;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在为excel工作簿添加多个工作表.我希望在一张纸上有一行而在另一张纸上有另一行.此代码将两行放在两个工作表上.有想法该怎么解决这个吗?
SpreadsheetDocument ssDoc = SpreadsheetDocument.Create(saveFile, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document
WorkbookPart workbookPart = ssDoc.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
// Add a WorksheetPart to theWorkbookPart
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = ssDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
Sheet sheet1 = new Sheet()
{ Id = ssDoc.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1, Name = "Sheet1"
};
Sheet sheet2 = new Sheet()
{
Id = ssDoc.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 2, Name = "Sheet2"
};
sheets.Append(sheet1);
sheets.Append(sheet2);
Worksheet worksheet = new Worksheet(); …Run Code Online (Sandbox Code Playgroud) 我想使用WPF RichTextBox,它允许用户编辑和格式化文本.这种格式化的文本最终将与我们的一些其他自定义XML数据一起进入Word文档.
我发现了几个从WordML到FlowDocument的例子,但没有将RichTextBox FlowDocument转换为WordML的例子.
而不是重新发明轮子,是否有一个开源XSLT文件,我可以用来将WPF FlowDocument转换为WordML?
我不是在寻找100%的解决方案(例如桌子,数字,图纸等).此时,我只对保留字体格式,段落,项目符号列表等感兴趣.
编辑:
如果可能的话,我需要避免使用Word Interop或昂贵的第三方工具(例如Apose).我正在寻找一种优雅的方式将一些基本的FlowDocument XML格式的内容翻译成OpenXML,最好是通过XSLT.由于我对嵌入式图片等项目不感兴趣,我认为这可能是可行的,因为我发现了另一个方向的例子(即OpenXML/WordML到XAML Flowdocument)
openxml ×10
c# ×7
openxml-sdk ×3
.net ×2
docx ×2
excel ×2
ms-word ×2
apache-poi ×1
appendchild ×1
wordml ×1
wpf ×1
xls ×1
xlsx ×1
xml ×1
xslt ×1