标签: openxml

将HTML插入OpenXML Word文档(.Net)

使用OpenXML SDK,我想将基本HTML片段插入到Word文档中.

你会怎么做:

  • 直接操作XML?
  • 使用XSLT?
  • 使用AltChunk?

而且,C#或VB的例子非常受欢迎:)

.net word-2007 openxml

7
推荐指数
3
解决办法
2万
查看次数

Office Open XML(OOXML)规范:加密

我试图了解如何捆绑加密("密码保护")Office 2007文档(特别是Excel文档).我正在尝试使用已知的受密码保护的电子表格.

当我解压缩XLSX文件时,我遇到三个条目:

  • [6] DataSpaces(目录)
  • EncryptionInfo(文件)
  • EncryptedPackage(文件)

EncryptedPackage文件是如何加密的(哪个密码,哪个密钥派生函数等...)?

我试过引用文档,但我没有取得多大成功.

encryption passwords ms-office openxml

7
推荐指数
1
解决办法
9194
查看次数

Open XML SDK:格式化Excel单元格的一部分

使用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)

注释掉现在使用的代码,但应该或可能应该更改.

c# excel openxml openxml-sdk

7
推荐指数
1
解决办法
6685
查看次数

在openxml中的书签后插入文本

我正在寻找一种方法,使用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文档中的书签后插入文本的正确方法?

c# ms-word word-automation openxml

7
推荐指数
1
解决办法
8119
查看次数

从ASP.NET页面下载EXCEL文件而不在服务器上生成物理文件(On The Fly)

我正在尝试使用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)

c# asp.net openxml office-interop openxml-sdk

7
推荐指数
1
解决办法
2万
查看次数

OpenXml:工作表子元素在排序中更改导致损坏的文件

我正在尝试使用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文件,必要时为工作表创建一个新的子元素并附加它.但现在这可能会破坏这些元素应该被追加的顺序.

谢谢.

c# openxml openxml-sdk

7
推荐指数
1
解决办法
2695
查看次数

设置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)

c# excel openxml

7
推荐指数
1
解决办法
2393
查看次数

搜索和替换占位符可以分割为多个<w:t> -Elements

我正在尝试使用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)

c# search replace openxml

7
推荐指数
1
解决办法
2436
查看次数

修改excel单元格

早上好,我想从已经存在的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)

c# openxml asp.net-mvc-4 epplus

7
推荐指数
4
解决办法
4万
查看次数

将嵌入的Excel对象从docx文件转换为图像

我正在使用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.xml
  • Excel文件包含在Mydoc/word/embeddings/Excel_Sheet_1.xlsx(或类似的东西)中.

如果这是要走的路,那么问题分为两部分:

  1. 转换Excel_Sheet_1.xlsx为图像(如何知道图像和单元格区域是图像的一部分?).
  2. 调整document.xml以使其显示"指向图像"而不是指向嵌入文件.

OOXML相当复杂,特别是当你尝试做一些像我想做的那样"基本"的事情时......有没有人从Unix平台走到那里并带回一些明智的东西?

python excel openxml pandoc python-docx

7
推荐指数
1
解决办法
827
查看次数