C#,使用 OpenXmlWriter 和 Open XML SDK 编写 XLSX

2024-03-06

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

我让它工作没有OpenXmlWriter但我开始内存不足,所以我必须切换到OpenXmlWriter根据这个http://blogs.msdn.com/b/brian_jones/archive/2010/06/22/writing-large-excel-files-with-the-open-xml-sdk.aspx 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();
        }
    }
}

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


我还不太明白这一点,但我已经成功了。 这就是我最终得到的结果。

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();


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

Which is

<?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>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#,使用 OpenXmlWriter 和 Open XML SDK 编写 XLSX 的相关文章

  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • 动态禁用 jQuery Datepicker 图标

    我对 jQuery 相当陌生 并且我一直在寻找一个像样的免费日期选择器有一段时间了 我对 jQuery UI 的日期选择器非常满意 但我遇到了障碍 我使用它的项目要求我在文本框旁边有一个图标 虽然这相当简单 但我不知道如何动态禁用该图标 有
  • 在 MATLAB 中单击图像时从指针获取索引值

    如何找到点击点的索引并将其添加到数组 列表或向量的末尾 h figure image result locx locy while ishandle h pos get 0 PointerLocation locx end 1 pos 1
  • RuntimeException:在注册表中找不到应用程序“”。

    背景 目标 我尝试在 Windows 7 64 位上安装 Simics Tools for Eclipse 插件 我正在使用 Eclipse Indigo for Java 64 位 为了解决这个问题 我决定在当前设置旁边安装 32 位版本
  • 将 LWJGL java 应用程序放入 jpanel 或 canvas 中

    随着 lwjgl 3 的新更新 类 Display 不存在 我到处搜索 但找不到任何有关如何将所有 lwjgl 应用程序放入 jpanel 或画布或类似内容的内容 我已经想过使用像 twl 这样的 opengl gui 但这会让一切变得更加
  • iOS 6 中的分段控件tintColor

    我有一个有 8 段的分段控件 我可以更改整个控件的默认色调 但是我可以为控件中的每个部分设置不同的颜色吗 我找到了一个在 5 1 中使用的教程 其中有一个调用此方法的新类 void setTintColor UIColor color fo
  • onCreate 流程在 finish() 之后继续

    我想从内部完成一项活动onCreate方法 当我打电话时finish onDestroy 不会立即调用 代码不断流过finish onDestroy 直到之后才被调用onCreate 右大括号 Per the onCreate 描述位于de
  • 展开两个大数据文件并使用data.table应用?

    我正在尝试将函数应用于两个数据集df1 and df2 where df1包含 a b 并且可以有 100 万行长 并且df2包含 x y z 并且可以非常大 从 100 到 gt 10 000 我想应用一个函数foo对两个数据集的每个组合
  • SwiftUI ForEach 'identified(by:)' 已弃用。使用 ForEach(_:id:) 或 List(_:id:)

    在 XCode 11 beta 4 上 以下内容似乎已被弃用 我不知道如何重写它 有谁知道如何使用ForEach id State private var showTargets id 1 state false x 109 28 y 10
  • 永远的nodejs:如何运行我的npm应用程序

    现在我正在运行我的 Node js 应用程序npm start 我想在后台运行它 我发现forever包 但不知道如何运行我通常运行的应用程序npm start 那么我怎样才能使用它来运行它forever 我跟随this SO https
  • jqGrid 有 CDN 吗?

    谁知道有没有CDNjqGrid http www trirand com blog Thanks Here is JQgrid 的 CDN http www jsdelivr com jqgrid 不过 不是最小版本 http www js
  • Laravel 上的 Amazon S3 ERR_INSECURE_RESPONSE

    我在我的子域上使用 Laravel 框架sub example com尝试为我网站的所有图片实现与 Amazon S3 的连接 这是我的存储桶政策 bucket 1 Id Policy Version 2012 10 17 Statemen
  • 在 Woocommerce 的某些页面上添加产品 ID 的星级评级

    有没有办法在自定义页面 自定义位置调用特定产品的星级 换句话说 我是否可以添加特定 T 恤的星级 以显示在主页上该 T 恤图片的下方 我想我需要向编辑器添加某种 php 然后通过某种 html 调用它 我看见这个回答的话题 https st
  • python 阿拉伯语编码问题

    我有一个带有 windows 1256 编码的文本 现在我想将文本从阿拉伯语 windows 1256 转换为utf 8 示例文本 result 我用这个代码来解码和编码为utf 8 coding utf 8 data print data
  • 使用 pcapdotnet 将数据包拆分为 2 个数据包

    如何使用 pcapdotnet 将一个数据包分成两个数据包 这是我尝试过的 但不知道是否正确 public IEnumerable
  • 通过 JIRA REST API 从自定义字段获取值

    我想获取自定义字段的所有下拉选项 对于系统字段 我使用以下 URI http localhost 8080 rest api 2 project XXXX components http localhost 8080 rest api 2
  • Flutterfire 抛出 dart not found 错误

    我正在关注 flutter firebase codelab 并且我一直在我的 android 应用程序中配置 firebase 我已经在我的计算机上全局安装了 flutterfire cli 并将 bin 导出到我的路径中 export
  • 获取R中的所有组合,允许重复

    内置的combn只给出一半的组合 gt t combn 1 5 2 1 2 1 1 2 2 1 3 3 1 4 4 1 5 5 2 3 6 2 4 7 2 5 8 3 4 9 3 5 10 4 5 例如 没有 1 1 也没有 2 1 我怎样
  • Azure Webjobs 与 Azure Functions:如何选择

    我创建了一些Azure 网络作业 https azure microsoft com en us documentation articles websites webjobs resources 使用触发器 我刚刚了解到Azure 函数
  • 正则表达式在最后一个冒号之后查找字符串

    以下是一些示例输入 lt 210 gt DW AT name indirect string offset 0x55 double
  • C#,使用 OpenXmlWriter 和 Open XML SDK 编写 XLSX

    在 C 中 以下程序编译并运行 但它不会在 Excel 输出文件中写入任何内容 我让它工作没有OpenXmlWriter但我开始内存不足 所以我必须切换到OpenXmlWriter根据这个http blogs msdn com b bria