C#,使用OpenXmlWriter和Open XML SDK编写XLSX [英] C#, Write XLSX using OpenXmlWriter and Open XML SDK

查看:156
本文介绍了C#,使用OpenXmlWriter和Open XML SDK编写XLSX的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在C#中,以下程序可以编译并运行,但不会在excel输出文件中写入任何内容.

In C#, the following program compiles and runs, but it doesn't write anything in the excel output file.

我在没有OpenXmlWriter的情况下正常工作,但是我开始用尽内存,因此我必须根据

I got it working without the OpenXmlWriter but I started running out of memory so I have to switch to the OpenXmlWriter according to this http://blogs.msdn.com/b/brian_jones/archive/2010/06/22/writing-large-excel-files-with-the-open-xml-sdk.aspx

class Program
{
    static void Main(string[] args)
    {
        File.Copy("book.xlsx", "output.xlsx", true);
        WriteValuesSAX("output.xlsx", 10, 10);
    }

    static void WriteValuesSAX(string filename, int numRows, int numCols)
    {
        using (SpreadsheetDocument myDoc = 
               SpreadsheetDocument.Open(filename, true))
        {
            WorkbookPart workbookPart = myDoc.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();

            OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart);

            Row r = new Row();
            Cell c = new Cell();
            CellValue v = new CellValue("Test");
            c.AppendChild(v);

            writer.WriteStartElement(new SheetData());
            for (int row = 0; row < numRows; row++)
            {
                writer.WriteStartElement(r);
                for (int col = 0; col < numCols; col++)
                {
                    writer.WriteElement(c);
                }
                writer.WriteEndElement();
            }
            writer.WriteEndElement();

            writer.Close();
        }
    }
}

为什么不写任何东西输出?

Why doesn't it write anything to output?

推荐答案

我对此还不太了解,但是我知道了. 这就是我最后得到的.

I don't understand this well enough yet, but I got it working. Here's what I ended up with.

class Program
{
    static void Main(string[] args)
    {
        File.Copy("book.xlsx", "output.xlsx", true);
        WriteRandomValuesSAX("output.xlsx", 10, 10);
    }

    static void WriteRandomValuesSAX(string filename, int numRows, int numCols)
    {
        using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true))
        {
            WorkbookPart workbookPart = myDoc.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last();

            OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart);

            Row r = new Row();
            Cell c = new Cell();
            CellValue v = new CellValue("Test");
            c.AppendChild(v);

            writer.WriteStartElement(new Worksheet());
            writer.WriteStartElement(new SheetData());
            for (int row = 0; row < numRows; row++)
            {
                writer.WriteStartElement(r);
                for (int col = 0; col < numCols; col++)
                {
                    writer.WriteElement(c);
                }
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.WriteEndElement();

            writer.Close();
        }
    }
}

注意,我添加了writer.WriteStartElement(new Worksheet());和另一个writer.WriteEndElement();

Notice I added writer.WriteStartElement(new Worksheet()); and another writer.WriteEndElement();

我在这里找到了正确的xml格式: http://msdn.microsoft .com/en-us/library/gg278309.aspx

I found the correct xml format here: http://msdn.microsoft.com/en-us/library/gg278309.aspx

哪个

<?xml version="1.0" encoding="utf-8"?> <x:worksheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <x:sheetData>
        <x:row r="1">
            <x:c r="A1" t="n">
                <x:v>100</x:v>
            </x:c>
        </x:row>
    </x:sheetData> </x:worksheet>

所以我打开(解压缩)xlsx文件并导航到output.xlsx \ xl \ worksheets \ sheet1.xml,发现我缺少<x:worksheet>.

So I opened (unzipped) the xlsx file and navigated to output.xlsx\xl\worksheets\sheet1.xml and saw that I was missing the <x:worksheet>.

这篇关于C#,使用OpenXmlWriter和Open XML SDK编写XLSX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆