标签: openxml

如何使用OpenXml SDK 2.0更改Word 2007中的内容控件的内容?

即将生气这个问题.我确信这很简单,我只是错过了它,但我不能为我的生活找到如何使用C#中的OpenXml SDK v2.0更改Word 2007中的内容控件的内容.

我创建了一个带有纯文本内容控件的Word文档.此控件的标记是"FirstName".在代码中,我想打开Word文档,找到此内容控件,并更改内容而不会丢失格式.

我最终开始工作的解决方案包括找到内容控件,在其后面插入一个run,然后删除内容控件:

using (WordprocessingDocument wordProcessingDocument = WordprocessingDocument.Open(filePath, true)) {
MainDocumentPart mainDocumentPart = wordProcessingDocument.MainDocumentPart;
SdtRun sdtRun = mainDocumentPart.Document.Descendants<SdtRun>()
 .Where(run => run.SdtProperties.GetFirstChild<Tag>().Val == "FirstName").Single();

if (sdtRun != null) {
 sdtRun.Parent.InsertAfter(new Run(new Text("John")), sdtRun);
 sdtRun.Remove();
}
Run Code Online (Sandbox Code Playgroud)

这确实改变了文本,但我丢失了所有格式.有谁知道我怎么做到这一点?

word-2007 openxml

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

Office Open XML中<ct ="str">和<c> <is>之间有什么区别?

这两个Office Open XML片段之间有什么区别?

<c r="A2" t="str">
  <v>btyler</v>
</c>
Run Code Online (Sandbox Code Playgroud)

<c r="B2">
  <is><t>btyler</t></is>
</c>    
Run Code Online (Sandbox Code Playgroud)

注意:我根据规范手动创建的第二个示例,第一个是来自实际的Excel工作簿.

双方似乎都有效,并根据规范几乎是相同的,所以我不知道为什么会有t="str"<is>似乎做同样的事情.Excel何时选择使用其中一个?

excel openxml xlsx spreadsheetml openxml-sdk

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

无法使用带F#的OpenXml附加工作表(FSharp)

OpenXml文档中的CreateSpreadsheetWorkbook示例方法确实直接转换为F#.问题似乎是Sheets对象的Append方法.代码执行时没有错误,但生成的xlsx文件缺少应该附加的内部Xml,并且Excel无法读取该文件.我怀疑问题源于将功能性F#结构转换为System.Collections类型,但我没有直接证据.

我在C#和VB.NET(即文档示例)中运行了类似的代码,它完美地执行并创建一个可读的,完整的xlsx文件.

我知道我可以直接处理XML,但我想了解F#和OpenXml之间不匹配的性质.有什么建议?

代码几乎直接来自示例:

namespace OpenXmlLib
open System
open DocumentFormat
open DocumentFormat.OpenXml
open DocumentFormat.OpenXml.Packaging 
open DocumentFormat.OpenXml.Spreadsheet

module OpenXmlXL = 
   // this function overwrites an existing file without warning!
   let CreateSpreadsheetWorkbook (filepath: string) = 
      // Create a spreadsheet document by supplying the filepath.
      // By default, AutoSave = true, Editable = true, and Type = xlsx.
      let spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook)
      // Add a WorkbookPart to the document.
      let workbookpart = spreadsheetDocument.AddWorkbookPart()
      workbookpart.Workbook <- new Workbook()

      // Add a WorksheetPart to …
Run Code Online (Sandbox Code Playgroud)

f# openxml

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

OpenXml电子表格.值过滤器,样式和unicode字符

由于文档很少,我在C#中遇到OpenXml SpreadSheetDocument问题.

  1. 如何使用过滤器制作顶行?
  2. 如何使颜色交替?
  3. 我想在我的SheetData中放入unicode字符,但是当我选择excel时它会给我一个错误..
  4. 更改顶行颜色.你能说是否有一些正确的方法可以做到这一点,比msdn上提供的更多文档,或者发布一些StyleSheet代码?对不起我的英语不好.谢谢.

.net c# openxml c#-4.0

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

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
查看次数

Excel OpenXML中的命名范围

我试图用OpenXML在Excel中创建命名范围.我能够在DefinedNames集合中添加DefinedName,但似乎没有做任何事情.我注意到在ExtendedFileProperties中有一个位置,其中保存了范围的名称,一个名为"TitlesOfParts"的结构.我尝试在那里添加一个条目,但这会导致excel抛出错误,并且不会创建命名范围.这是我正在使用的代码:

public void AddNamedRange(string pNamedRangeRef, string pNamedRangeName)
    {
        DefinedName _definedName = new DefinedName() { Name = pNamedRangeName, Text = pNamedRangeRef };
        _workbook.Descendants<DocumentFormat.OpenXml.Spreadsheet.DefinedNames>().First().Append(_definedName);
        DocumentFormat.OpenXml.VariantTypes.VTLPSTR _t = new DocumentFormat.OpenXml.VariantTypes.VTLPSTR() { Text = pNamedRangeName };
        _spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Append(_t);
        _spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Size++;
    }
Run Code Online (Sandbox Code Playgroud)

excel range openxml named

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

设置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
查看次数

修改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万
查看次数

从XLSX导出大量数据 - OutOfMemoryException

我正在接近以Excel OpenXML格式(xlsx)导出大量数据(115.000行x 30列).我正在使用一些像DocumentFormat.OpenXML,ClosedXML,NPOI这样的库.

每次抛出OutOfMemoryException都会抛出,因为内存中表单的表示会导致指数内存增加.

每1000个关闭文档文件(并释放内存),下一次加载会导致内存增加.

是否有更高效的方式在xlsx中导出数据而不占用大量内存?

.net openxml xlsx closedxml

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

使用OpenXML和Regex在Word Docx中查找和替换撇号(')的问题

Word似乎使用与Visual Studio不同的撇号字符,这导致使用Regex出现问题。

我正在尝试使用OpenXML在C#中编辑一些Word文档。我基本上是用公司名称代替[[COMPANY]]。直到我到达名称以s结尾的公司的极端案例为止,这一直非常顺利。我最终遇到问题s,有时它会创建一个s。

示例:公司名称:Simmons Doc中的文本:[[COMPANY]]的业务是汽车。结果:Simmons的业务是汽车。

这是不正确的英语。

我应该能够像使用[[COMPANY]]一样使用基本的查找和替换,但是它不起作用。

            Regex apostropheReplace = new Regex("s\\'s");
            docText = apostropheReplace.Replace(docText, "s\'"); 
Run Code Online (Sandbox Code Playgroud)

这不是。似乎Word使用的字符和撇号()不同于我在Visual Studio中使用键盘上的键创建的标准字符。如果我使用键盘写了一个查找并替换,它将无法正常工作,但是如果我复制并粘贴Word中的撇号,它将起作用。

            Regex apostrophyReplace = new Regex("s\\’s");
            docText = apostrophyReplace.Replace(docText, "s\'"); 
Run Code Online (Sandbox Code Playgroud)

注意第二个正则表达式中的不同字符。我对为什么这样做感到困惑,并且还想知道这样做是否正确。我尝试使用“'”,但这不起作用。我只想知道是否使用从Word复制的字符是执行此操作的正确方法,并且是否有办法做到这两个字符都能正常工作,所以我对使用其他方法创建的文档没有问题程序。

c# regex replace openxml

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