使用OpenXML SDK,我想将基本HTML片段插入到Word文档中.
你会怎么做:
而且,C#或VB的例子非常受欢迎:)
我试图了解如何捆绑加密("密码保护")Office 2007文档(特别是Excel文档).我正在尝试使用已知的受密码保护的电子表格.
当我解压缩XLSX文件时,我遇到三个条目:
EncryptedPackage文件是如何加密的(哪个密码,哪个密钥派生函数等...)?
我试过引用文档,但我没有取得多大成功.
使用Open XML for Excel DocumentFormat.OpenXml.Spreadsheet,如何仅将文本的一部分设置为粗体?
var cell = new Cell {
//DataType = CellValues.InlineString,
CellReference = "A" + 1
};
// TODO: Set "bold text" to bold style
//var inlineString = new InlineString();
//inlineString.AppendChild(new Text { Text = "Normal text... bold text..." });
//cell.AppendChild(inlineString);
Run Code Online (Sandbox Code Playgroud)
注释掉现在使用的代码,但应该或可能应该更改.
我正在寻找一种方法,使用openxml在word doc中的书签后插入一些文本.到目前为止,我已经能够使用以下内容找到书签:
var bookmarks = mainPart.Document.Descendants<BookmarkStart>().ToList();
var bookMarkToWriteAfter = bookmarks.FirstOrDefault(bm => bm.Name == insertAfterBoomark.Name);
Run Code Online (Sandbox Code Playgroud)
单词doc中的这个书签是doc中两行的选择.我必须在两行选择后立即插入一些文本.我试图使用以下内容插入文本:
var run = new Run();
run.Append(new Text("Hello World"));
bookMarkToWriteAfter .Parent.InsertAfterSelf(run);
mainPart.Document.Save();
Run Code Online (Sandbox Code Playgroud)
然而,这不会产生期望的结果.有没有人知道使用openxml在word文档中的书签后插入文本的正确方法?
我正在尝试使用Microsoft Office EXCEL INTEROP将C#DataTable动态导出到EXCEL文件(不创建物理文件),并通过asp.net网页通过Response对象下载.我能够使用库生成内存流但不知何故文件没有通过内存流保存.参考代码如下.您将需要参考DocumentFormat.OpenXml.dll和WindowsBase.DLL(可以从microsoft站点下载).
任何想法如何解决问题???
Private void DownloadFile()
{
DataSet objTable = ReadTableFromViewstate();
if (objTable != null && objTable.Rows.Count > 0)
{
string strDownloadableFilename = "TestExcelFileName.xls";
MemoryStream fs1 = new MemoryStream();
if (CreateExcelFile.CreateExcelDocument(objTable, fs1))
{
Response.Clear();
byte[] data1 = new byte[fs1.Length];
fs1.Read(data1, 0, data1.Length);
fs1.Close();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", strDownloadableFilename));
Response.BinaryWrite(data1); ;
Response.End();
}
else
{
LblErrorMessage.Text = "Error Exporting File.";
}
}
}
Run Code Online (Sandbox Code Playgroud)
..
public static bool CreateExcelDocument(DataSet ds, System.IO.Stream excelFileStream)
{
try
{
using (SpreadsheetDocument document …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用openxml来生成自动excel文件.我面临的一个问题是使用excel的开放式xml对象模型来容纳我的对象模型.我必须明白我为工作表添加子元素的顺序很重要.
例如:
workSheet.Append(sheetViews);
workSheet.Append(columns);
workSheet.Append(sheetData);
workSheet.Append(mergeCells);
workSheet.Append(drawing);
Run Code Online (Sandbox Code Playgroud)
上面的排序不会给出任何错误.
但是以下内容:
workSheet.Append(sheetViews);
workSheet.Append(columns);
workSheet.Append(sheetData);
workSheet.Append(drawing);
workSheet.Append(mergeCells);
Run Code Online (Sandbox Code Playgroud)
给出错误
所以这不允许我随时创建一个绘图对象并将其附加到工作表中.这迫使我在使用它们之前创建这些元素.
谁能告诉我,我是否正确理解了这个问题?因为我相信我们应该能够打开任何excel文件,必要时为工作表创建一个新的子元素并附加它.但现在这可能会破坏这些元素应该被追加的顺序.
谢谢.
我正在尝试使用OpenXML框架在Excel电子表格中设置默认列宽,因此我的文件已损坏.这是代码
private void initSpreadsheetDocument()
{
// Add a WorkbookPart to the spreadsheet document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
var sheetData = new SheetData();
var properties = new SheetFormatProperties { DefaultColumnWidth = 25D };
Worksheet worksheet = new Worksheet();
worksheet.AppendChild(sheetData);
// here is line of code that corrupt file
// without it - file is being generated properly
worksheet.AppendChild(properties); ![enter image description here][1]
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = worksheet;
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Open XML SDK 2.5从.docx-Templates创建报告.在模板中,我定义了一些被实际值替换的占位符.占位符可以在各种模式中定义,例如
<#Name#>
or
<!#Name#!>
or
#Name#
or
{{Name}}
Run Code Online (Sandbox Code Playgroud)
占位符的模式也可以采用其他格式,只要可以在文本中清楚地标识占位符即可.
我目前面临的问题是一个占位符多间经常分裂<w:t>-elements( DocumentFormat.OpenXml.Wordprocessing.Text)的范围内<w:p>-元素(DocumentFormat.OpenXml.Wordprocessing.Paragraph).一个例子
<w:p w:rsidR="003137E0" w:rsidRDefault="008C62F1" w:rsidP="00D43D55">
<w:r>
<w:t xml:space="preserve">#FirstName# </w:t>
</w:r>
<w:r w:rsidR="00C93A70">
<w:t>#LastName</w:t>
</w:r>
<w:r w:rsidR="005F49B7">
<w:t>#</w:t>
</w:r>
</w:p>
Run Code Online (Sandbox Code Playgroud)
这里占位符#FirstName#很容易识别,因为它在一个<w:t>元素内,但是占位符#LastName#在多个<w:t>元素之间分割,所以我不能在文档上的文本上使用简单的正则表达式
Regex placeholderRegex = new Regex(@"#[\w]*#");
document.MainDocumentPart.Document.Body.Descendants<Text>().Where(t=> placeholderRegex.IsMatch(t.Text))
Run Code Online (Sandbox Code Playgroud)
我无法控制模板的定义方式,也不会对用户如何创建模板施加约束.对我来说,当占位符分成多个<w:t>元素时也不清楚.
另一个使用{{[\w]*}}占位符模式的示例.
文字(Docx)
{{Ort}}
And this {{placeholder}} is within the text
Run Code Online (Sandbox Code Playgroud)
Xml(OpenXML)
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" …Run Code Online (Sandbox Code Playgroud) 早上好,我想从已经存在的excell文件中编辑一些单元格.我尝试过使用EPPlus和普通的OpenXml类.但是我失败了.在这两种情况下,程序都不会崩溃但总是返回旧的(未修改的)excel.拜托,我做错了什么?
试验1 - EPPlus:
MemoryStream memoryStream = new MemoryStream();
using (var fs = new FileStream(@"Path\Test.xlsx", FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStream.Write(buffer, 0, bytesRead);
}
}
using (ExcelPackage excelPackage = new ExcelPackage(memoryStream))
{
ExcelWorkbook excelWorkBook = excelPackage.Workbook;
ExcelWorksheet excelWorksheet = excelWorkBook.Worksheets.First();
excelWorksheet.Cells[1, 1].Value = "Test";
excelWorksheet.Cells[3, 2].Value = "Test2";
excelWorksheet.Cells[3, 3].Value = "Test3";
excelPackage.Save();
}
memoryStream.Position = 0;
return new FileStreamResult(memoryStream, "application/xlsx")
{
FileDownloadName = …Run Code Online (Sandbox Code Playgroud) 我正在使用pandoc(通过pypandoc)将docx文件转换为非Windows机器上的markdown.这些文件可以包含图像,也可以包含其他嵌入对象.
pandoc实际上能够将嵌入式Powerpoint演示文稿(转换为EMF文件)转换,但它无法处理Excel对象(它会忽略它们).目标是使用python将这些嵌入的Excel对象转换为图像,以便它们可以作为HTML输出的一部分显示.
只要可以使用python API包装,就可以使用以其他语言编写的组件(例如bash脚本).
我意识到这可能是非Windows平台上的高级订单(例如,没有Microsoft库win32com).有没有人对此有任何成功,或有任何有根据的猜测如何进行?
要显示的单元格区域是什么?
所有嵌入对象的核心问题是确定应该显示哪些部分,因为这是核心功能.
必须有一种方法来确定要显示哪些单元格,因为在读取docx文件的内容时,Word可以使用该信息.
这是问题的症结所在.如果实际算法不能考虑到这一点,那么答案仍将被接受,只要它提供了一种提取信息的方法.
根据建议探索文件本身的结构,这里是我观察到的:如果你创建一个Mydoc.docx带有嵌入式Excel文件的简单docx文档(),你可以通过制作docx文件的副本来检查它的内容(重命名它)使用.zip扩展名)并解压缩.
Mydoc/word/document.xmlMydoc/word/embeddings/Excel_Sheet_1.xlsx(或类似的东西)中.如果这是要走的路,那么问题分为两部分:
Excel_Sheet_1.xlsx为图像(如何知道图像和单元格区域是图像的一部分?).document.xml以使其显示"指向图像"而不是指向嵌入文件.OOXML相当复杂,特别是当你尝试做一些像我想做的那样"基本"的事情时......有没有人从Unix平台走到那里并带回一些明智的东西?