标签: openxml

如何将Excel OpenXML共享字符串转换为内联字符串?

我有一个Excel 2007 OpenXML格式的大型电子表格,我想以编程方式在xml中操作.Excel使用共享字符串方法保存它,虽然效率更高,但会使过程复杂化.有没有人知道Excel中是否有一个选项可以使用内联字符串进行保存,或者是否已经构建了一个实用程序来将所有字符串重新放回到sheet.xml中?没有太多的运气谷歌搜索,我宁愿使用现有的解决方案,而不是建立我自己的转换器,如果可能的话.谢谢.

xml excel openxml

6
推荐指数
1
解决办法
6485
查看次数

在OpenXml-SDK中使用TDD

我已经开始使用TDD方法开发一个从Excel文件中读取数据的小应用程序.使用存储库模式类型的方法,我遇到了困扰我的障碍.

为了读取Excel文件,我使用的是OpenXml-SDK.现在通常使用SDK从Excel文件中读取需要几个(如果不是更多)步骤来实际获取您想要读取的值.

到目前为止,我所采用的方法反映在以下测试和附带功能中.

    [Test]
    public void GetRateData_ShouldReturn_SpreadSheetDocument()
    {
        //Arrange
        var fpBuilder = new Mock<IDirectoryBuilder>();
        fpBuilder.Setup(fp => fp.FullPath()).Returns(It.IsAny<string>());

        var doc = new Mock<IOpenXmlUtilities>();
        doc.Setup(d => d.OpenReadOnlySpreadSheet(It.IsAny<string>()))
             .Returns(Mock.Of<SpreadsheetDocument>());

        swapData = new SwapRatesRepository(fpBuilder.Object, doc.Object);

        //Act
        var result = swapData.GetRateData();

        //Assert
        doc.Verify();
        fpBuilder.Verify();
    }

public class SwapRatesRepository: IRatesRepository<SwapRates>
{
    private const string SWAP_DATA_FILENAME = "DATE_MKT_ZAR_SWAPFRA1.xlsx";
    private IDirectoryBuilder builder;
    private IOpenXmlUtilities openUtils;

    public SwapRatesRepository(IDirectoryBuilder builder)
    {
        // TODO: Complete member initialization
        this.builder = builder;
    }

    public SwapRatesRepository(IDirectoryBuilder builder, 
                                       IOpenXmlUtilities openUtils)
    {
        // TODO: Complete member …
Run Code Online (Sandbox Code Playgroud)

c# tdd unit-testing openxml openxml-sdk

6
推荐指数
1
解决办法
866
查看次数

将XML数据存储在Excel文件中的最佳方法是什么?

我正在寻找一种将XML数据存储在Excel文件中的方法.数据应该完全隐藏给用户,它不应该在单元格或注释中,甚至是隐藏的.此外,应在用户打开时保留数据,然后使用Excel保存文件.我不是在寻找一种将单元格映射到外部XML数据的方法.XML数据应该在xlsx文件中.

数据将使用C#工具输入,而不是Excel本身.

c# xml excel openxml

6
推荐指数
3
解决办法
6786
查看次数

在Powerpoint幻灯片中更改文本框中的文本

我有一个包含3张幻灯片的Powerpoint演示文稿.每张幻灯片都有一个文本框,它是一个占位符.我想替换一张幻灯片上的文本框内容.

我需要知道如何使用C#和OpenXML来做到这一点

万分感谢

openxml presentationml

6
推荐指数
1
解决办法
2723
查看次数

将Word DOCX文件另存为PDF

我正在使用openxml来创建Word DOCX文件.我想将这些文档创建为PDF文件后保存.有没有办法在openxml中做到这一点?我认为答案是否定的.如果不是,是否有推荐的库或工具可用于将DOCX文件保存/打印为PDF(以编程方式,在.NET中)?我看了一下sharpPDF(PDFSharp),看来这个库只是用于从头开始生成PDF,而不是将DOCX保存为PDF.

我能以某种方式以完全自动化的方式打印到已安装的PDF打印机,可爱的PDF或内置于Windows 7的PDF打印机吗?

更新:寻找免费的非病毒许可证,最好不需要额外的安装.

.net c# pdf docx openxml

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

如何在OpenXML中从名称或工作表ID中获取Worksheetpart?

以下创建了一个XLSX,添加了两个包含一些数据的工作表.然后,我希望以后能够根据名称(或最好是id)获取电子表格,以便我可以在以后添加/修改工作表.我仍然坚持如何在下面的代码不完整的地方再次获取工作表.

    Sub Main()

    Using doc As SpreadsheetDocument = SpreadsheetDocument.Create(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "c:\temp\fubar.xlsx"), SpreadsheetDocumentType.Workbook)
        Dim currSheet As WorksheetPart

        ' create the workbook
        doc.AddWorkbookPart()
        doc.WorkbookPart.Workbook = New Workbook()
        doc.WorkbookPart.Workbook.AppendChild(New Sheets())

        currSheet = InsertWorksheet(doc.WorkbookPart, "First")
        currSheet.Worksheet.First().AppendChild(New Row())
        currSheet.Worksheet.First().First().AppendChild(New Cell() With { _
         .CellValue = New CellValue("1") _
        })

        currSheet = InsertWorksheet(doc.WorkbookPart, "Second")
        currSheet.Worksheet.First().AppendChild(New Row())
        currSheet.Worksheet.First().First().AppendChild(New Cell() With { _
         .CellValue = New CellValue("1") _
        })

        For Each s As Sheet In doc.WorkbookPart.Workbook.Sheets
            System.Diagnostics.Debug.WriteLine(s.Id)
            System.Diagnostics.Debug.WriteLine(s.SheetId)
        Next

        cursheet = ... 'Get worksheetpart with name "First"

        cursheet = …
Run Code Online (Sandbox Code Playgroud)

vb.net openxml openxml-sdk

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

如何确保 OpenXml 程序集不会与 SpreadsheetLight 产生冲突?

我 Nugot SpreadsheetLight。为了随后使用它,我需要添加以下用途:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
Run Code Online (Sandbox Code Playgroud)

为了识别前两个(“DocumentFormat”),我还需要使用 NuGet Microsoft 的“Open XML Format SDK”

我得到了最新版本,2.5

然而,即便如此,我还是收到了一个关于需要引用它的错误消息:

“DocumentFormat.OpenXml.Spreadsheet.InlineString”类型是在未引用的程序集中定义的。您必须添加对程序集“DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”的引用。

这行 SpreadsheetLight 代码激起了那个味精:

sl.SetCellValue("A1", true); // "sl" is an SLDocument
Run Code Online (Sandbox Code Playgroud)

因此,我从我的项目中删除了我拥有 NuGot(版本 2.6.0.0,运行时版本 v4.0.30319)的引用,然后通过浏览到 C:\Program Files(x86)\Open XML SDK\V2 添加回引用。 0\lib 并选择“DocumentFormat.OpenXml.dll”

然后我得到了一个编译器警告:

发现同一依赖程序集的不同版本之间存在冲突。请在项目文件中将“AutoGenerateBindingRedirects”属性设置为 true。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=294190

我注意到我从文件系统中添加的 DLL 是 2.5.5631.0 版本,而被 NuGot 安装作为参考的那个 DLL 是 2.6.0.0 版本,运行时版本也不同(v4.0.30319 是由NuGetting“Open XML Format SDK”,但是我手动添加的DLL版本是2.5.5631.0,Runtime Version v4.0.30319

根据这个,我得知我应该改变编辑的.csproj文件<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>为真-但AutoGenerateBindingRedirects不存在那里。

我不知道我是否应该添加它,如果是(在哪个“块”中)。我更喜欢谨慎行事并减轻警告引擎的影响。如何确保 OpenXml 程序集不会引起冲突?

csproj openxml openxml-sdk nuget spreadsheetlight

6
推荐指数
1
解决办法
5488
查看次数

如何解决这个子弹问题

在我的网站上,admin上传了一个.docx文件.我将文件转换为xml 使用OpenXmlPowerToolsApi.

问题是该文件中有一些子弹.

•这是我在文件中的子弹1.
•这是我在文件中的子弹2.

XElement html = OpenXmlPowerTools.HtmlConverter.ConvertToHtml(wDoc, settings);
var htmlString = html.ToString();
File.WriteAllText(destFileName.FullName, htmlString, Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

现在,当我打开xml文件时,它会将子弹渲染如下: -

XML渲染

我需要读取XML的每个节点并保存在数据库中并从节点重新构建html.

请不要问我为什么这样,因为我不是系统的老板.

如何在xml中正确渲染项目符号,以便我可以在数据库中保存正确的html?

c# asp.net openxml xml-parsing

6
推荐指数
1
解决办法
338
查看次数

通过 Open XML 将数据导出到 Excel 启用宏

我有一个 Excel 表,我将其用作导出数据的模板文件。

Excel 工作表是 XLSM 文件,几乎没有用 VBA 编写的代码。

每次使用时间戳复制和重命名文件时,都应将数据写入复制的 xlsm 文件,但不写入数据

我为此使用了 Open XML 库。

如果我使用 xlsx 模板文件,同样有效。

是否无法通过 Open XML 在启用了宏的 xlsm Excel 上写入?

如果是,请记住任何说明。

c# excel vba openxml

6
推荐指数
1
解决办法
1781
查看次数

对于 OpenXML Excel 文档,MemoryStream 为空

我通常会使用 ClosedXML 来生成 Excel 文件。核心项目迫使我只使用 OpenXML。

将下载生成的 Excel 文件。

我遇到了一个问题,其中提供给 SpreadsheetDocument 的内存流为空。

我尝试了多种方法来生成流。下面的代码代表了一个精简版,只创建了最基本的东西。同样,内存流是0有长度的。

我知道我应该使用using()等。这只是精简代码以尝试让它工作。

生成excel的代码;这是来自File对象的构造函数。AsMemoryStream是一个属性声明为public MemoryStream AsMemoryStream { get; private set; }

public File(IList<T> items)
        {
            if (!items.Any())
                throw new InvalidOperationException("items cannot be empty");


            MemoryStream documentStream = new MemoryStream();
            SpreadsheetDocument document = SpreadsheetDocument.Create(documentStream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook);

            WorkbookPart workbookPart = document.AddWorkbookPart();
            workbookPart.Workbook = new Workbook();

            WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
            worksheetPart.Worksheet = new Worksheet();

            Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
            Sheet sheet = new Sheet { …
Run Code Online (Sandbox Code Playgroud)

c# excel openxml openxml-sdk asp.net-core

6
推荐指数
1
解决办法
4050
查看次数