首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenXml Doc SDK2.0不在输出中生成DataSheet数据

OpenXml Doc SDK2.0不在输出中生成DataSheet数据
EN

Stack Overflow用户
提问于 2012-02-02 08:44:45
回答 2查看 723关注 0票数 1

我正在使用Open XML doc创建一个电子表格,并在内存流中输出它,然后从服务器返回它。但是,输出不包括数据表/工作表内容。我尝试了来自不同urls的各种示例,包括VB.NET。所有这些都不包括来自DataSheet的内容。但是,如果我使用Worksheet.OuterXml属性单独打印工作表的内容,它将正确显示。它不会作为Workbook.OuterXml属性的一部分打印。示例代码和输出如下所示。

代码语言:javascript
复制
private MemoryStream testSpreadsheetOutputAsStream()
    {
        MemoryStream outStream = new MemoryStream();
        using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(outStream, SpreadsheetDocumentType.Workbook))
        {
            // create the workbook
            spreadSheet.AddWorkbookPart();
            spreadSheet.WorkbookPart.Workbook = new Workbook();     // create the worksheet
            spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
            spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet();

            // create sheet data
            spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.AppendChild(new SheetData());

            // create row
            spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.First().AppendChild(new Row());

            // create cell with data
            spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.First().First().AppendChild(
                  new Cell() { CellValue = new CellValue("101") });

            // save worksheet
            spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.Save();

            // create the worksheet to workbook relation
            spreadSheet.WorkbookPart.Workbook.AppendChild(new Sheets());
            spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>().AppendChild(new Sheet()
            {
                Id = spreadSheet.WorkbookPart.GetIdOfPart(spreadSheet.WorkbookPart.WorksheetParts.First()),
                SheetId = 1,
                Name = "test"
            });

            spreadSheet.WorkbookPart.Workbook.Save();

            System.Diagnostics.Debug.WriteLine(spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.OuterXml);
            System.Diagnostics.Debug.WriteLine(spreadSheet.WorkbookPart.Workbook.OuterXml);
        }
        return outStream;

    }

output窗口的输出如下所示。

代码语言:javascript
复制
Worksheet output <x:worksheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><x:sheetData><x:row><x:c><x:v>101</x:v></x:c></x:row></x:sheetData></x:worksheet>

Workbook output

<x:workbook xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><x:sheets><x:sheet name="test" sheetId="1" r:id="R0ed99ee34c894367" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" /></x:sheets></x:workbook>
EN

回答 2

Stack Overflow用户

发布于 2012-03-26 06:22:27

我遇到了类似的问题,并通过在调用spreadSheet.WorkbookPart.Workbook.Save()之后调用spreadSheet.Close()修复了它。

票数 1
EN

Stack Overflow用户

发布于 2012-07-24 23:33:18

您必须关闭电子表格。对close的调用递归地调用所有子项上的save。

http://msdn.microsoft.com/en-us/library/documentformat.openxml.packaging.openxmlpackage.close

与其尝试从头开始创建电子表格,不如考虑使用ClosedXML或来看看I wrote的小型电子表格库。具体来说,要注意SheetDataIndexerSharedStringTableIndexer。我一直在做这些例子,因为我在自己的工作中做了相当多的OpenXML操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9105613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档