在 OpenXML 中应用数字格式

2024-05-09

我正在尝试使用 OpenXML 从头开始​​创建 Excel 电子表格,并且一切正常(将实际值转储到实际单元格中),但现在我正在尝试将数字格式应用于列,但遇到了问题。我有styles.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<x:styleSheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:numFmts count="12">
    <x:numFmt numFmtId="216" formatCode="#,###" />
    <x:numFmt numFmtId="217" formatCode="$#,###" />
    <x:numFmt numFmtId="218" formatCode="#0.00" />
    <x:numFmt numFmtId="219" formatCode="#,###" />
    <x:numFmt numFmtId="220" formatCode="#0.0%" />
    <x:numFmt numFmtId="221" formatCode="#,###" />
    <x:numFmt numFmtId="222" formatCode="#0.0%" />
    <x:numFmt numFmtId="223" formatCode="#0.0%" />
    <x:numFmt numFmtId="224" formatCode="#0.0%" />
    <x:numFmt numFmtId="225" formatCode="#,###" />
    <x:numFmt numFmtId="226" formatCode="#,###" />
    <x:numFmt numFmtId="227" formatCode="#0.0%" />
</x:numFmts>
<x:cellXfs count="12">
    <x:xf numFmtId="216" applyNumberFormat="1" />
    <x:xf numFmtId="217" applyNumberFormat="1" />
    <x:xf numFmtId="218" applyNumberFormat="1" />
    <x:xf numFmtId="219" applyNumberFormat="1" />
    <x:xf numFmtId="220" applyNumberFormat="1" />
    <x:xf numFmtId="221" applyNumberFormat="1" />
    <x:xf numFmtId="222" applyNumberFormat="1" />
    <x:xf numFmtId="223" applyNumberFormat="1" />
    <x:xf numFmtId="224" applyNumberFormat="1" />
    <x:xf numFmtId="225" applyNumberFormat="1" />
    <x:xf numFmtId="226" applyNumberFormat="1" />
    <x:xf numFmtId="227" applyNumberFormat="1" />
</x:cellXfs>
</x:styleSheet>

但 Excel 似乎不喜欢它,并在“修复”文件后将其删除。我在这里缺少什么?文档有点参差不齐exactly需要什么才能让 Excel 满意。

我手动分配了numFmtId从我认为可能适当高的数字开始。这是正确的做法吗?

另外,我知道formatCode是重复的,但我认为 Excel 不会因此而出错,如果有必要,我可以合并它们。

我的列定义如下所示(在sheet.xml):

<x:cols>
    <x:col min="1" max="1" width="7" />
    <x:col min="2" max="2" width="58" />
    <x:col min="3" max="3" width="16" style="0" />
    <x:col min="4" max="4" width="6" style="1" />
    <x:col min="5" max="5" width="17" style="2" />
    <x:col min="6" max="6" width="16" style="3" />
    <x:col min="7" max="7" width="18" style="4" />
    <x:col min="8" max="8" width="17" style="5" />
    <x:col min="9" max="9" width="20" style="6" />
    <x:col min="10" max="10" width="21" style="7" />
    <x:col min="11" max="11" width="21" style="8" />
    <x:col min="12" max="12" width="16" style="9" />
    <x:col min="13" max="13" width="16" style="10" />
    <x:col min="14" max="14" width="19" style="11" />
</x:cols>

为了进行比较 - 这是一个工作片段styles.xmlExcel本身创建的文件:

<numFmts count="1">
    <numFmt numFmtId="164" formatCode="#,##0\p"/>   // where does 164 come from?
</numFmts>

<cellXfs count="3">
    <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>  // do you always need a 0 xf entry? It isn't referenced in the sheet.xml file
    <xf numFmtId="3" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>        // assuming numFmtId = 3 is a built in format??
    <xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>
</cellXfs>

回答我自己的问题,但我看到了这篇文章:

http://polymathprogrammer.com/2009/11/09/how-to-create-stylesheet-in-excel-open-xml/ http://polymathprogrammer.com/2009/11/09/how-to-create-stylesheet-in-excel-open-xml/

这表明最小样式表需要的东西不仅仅是numFmtscellXfs。因此,我调整了他们的代码以生成一个最小的样式表,供我插入单元格格式和数字格式(我在循环中执行此操作):

    private Stylesheet CreateStylesheet()
    {
        Stylesheet ss = new Stylesheet();

        Fonts fts = new Fonts();
        DocumentFormat.OpenXml.Spreadsheet.Font ft = new DocumentFormat.OpenXml.Spreadsheet.Font()
        {
            FontName = new FontName()
            {
                Val = "Calibri"
            },
            FontSize = new FontSize()
            {
                Val = 11
            }
        };
        fts.Append(ft);
        fts.Count = (uint)fts.ChildElements.Count;

        Fills fills = new Fills();
        fills.Append(new Fill()
        {
            PatternFill = new PatternFill()
            {
                PatternType = PatternValues.None
            }
        });
        fills.Append(new Fill()
        {
            PatternFill = new PatternFill()
            {
                PatternType = PatternValues.Gray125
            }
        });
        fills.Count = (uint)fills.ChildElements.Count;

        Borders borders = new Borders();
        Border border = new Border()
        {
            LeftBorder = new LeftBorder(),
            RightBorder = new RightBorder(),
            TopBorder = new TopBorder(),
            BottomBorder = new BottomBorder(),
            DiagonalBorder = new DiagonalBorder()
        };
        borders.Append(border);
        borders.Count = (uint)borders.ChildElements.Count;

        CellStyleFormats csfs = new CellStyleFormats();
        CellFormat cf = new CellFormat() { 
            NumberFormatId = 0,
            FontId = 0,
            FillId = 0,
            BorderId = 0
        };

        csfs.Append(cf);
        csfs.Count = (uint)csfs.ChildElements.Count;

        NumberingFormats nfs = new NumberingFormats();
        CellFormats cfs = new CellFormats();
        cf = new CellFormat() 
        { 
            NumberFormatId = 0,
            FontId = 0,
            FillId = 0,
            BorderId = 0,
            FormatId = 0
        };
        cfs.Append(cf);

        ss.Append(nfs);
        ss.Append(fts);
        ss.Append(fills);
        ss.Append(borders);
        ss.Append(csfs);
        ss.Append(cfs);

        CellStyles css = new CellStyles();
        CellStyle cs = new CellStyle() 
        {
            Name = "Normal",
            FormatId = 0,
            BuiltinId = 0
        };
        css.Append(cs);
        css.Count = (uint)css.ChildElements.Count;
        ss.Append(css);

        DifferentialFormats dfs = new DifferentialFormats();
        dfs.Count = 0;
        ss.Append(dfs);

        TableStyles tss = new TableStyles() 
        {
            Count = 0,
            DefaultTableStyle = "TableStyleMedium9",
            DefaultPivotStyle = "PivotStyleLight16"
        };
        ss.Append(tss);

        return ss;
    }

不能肯定那里没有东西可以扔掉,但我没有耐心通过反复试验来看看它是否可以变得更苗条。

我猜是单元格格式must have a FontId, FillId, BorderId and FormatId除了NumberFormatId为了获得这些 ID,您需要为每个 ID 至少创建一个条目。尽管 XML 模式将它们标记为“可选”,但还是如此。

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

在 OpenXML 中应用数字格式 的相关文章

  • 从原始数据创建 n 个新行,例如 (1000....1000+n)

    我需要从 Excel 工作簿中读取数据 其中数据以这种方式存储 Company Accounts Company1 3000 3999 Company2 4000 4019 4021 4024 在 SSIS 中使用 OLE DB 目标的预期
  • VBA 按用户范围选择排序

    在过去的三天里我一直在为这个问题苦苦挣扎 所以请帮忙 我想做的是当我运行 Macro1 时 为了论证 将弹出窗口以选择应排序的单元格范围 通过选择的最后一列 或第五列 对这些进行排序 从最低数字到最高数字 这里的问题是所选区域每次都会改变
  • 将工作表保存为 CSV,且 Excel 公式完好无损

    我完全使用 VBA for Excel 工作 我的解决方案必须完全是程序化的 而不是用户驱动的 该解决方案的要求是用户启动一个宏来获取工作簿并将 8 个工作表保存到单独的 CSV 文件中 保留公式并丢弃公式分辨率 我有一系列工作表 sht
  • 合并数据框中的值以写入 Excel

    我有一个看起来像的数据框 column1 column2 column3 colum4 column5 1 r n 1 r s 1 r n 2 r s 3 r n 3 2 r n 1 r s 1 r n 4 r s 4 r n 5 3 r
  • 从 Excel 将参数传递到 SQL Server 上的 MS Query 中的临时变量

    我已经使用 Microsoft 查询创建了参数查询 如上所述here https superuser com questions 197453 run an sql query with a parameter from excel 200
  • vba Excel 中的多个查找请求(在查找中查找)

    我正在尝试执行一种嵌套查找请求 用例是我需要在一个工作表上查找组 如果找到 则从找到的行中的单独列中获取用户 ID 值 然后在另一张纸 然后它应该执行一系列操作 然后在第一张表中找到下一个出现的组 我的代码是 LookupGroup Spl
  • 使用VBA删除Excel中的非重复数据

    我尝试删除非重复数据并保留重复数据 我已经完成了一些编码 但什么也没发生 哦 这是错误 哈哈 这是我的代码 Sub mukjizat2 Dim desc As String Dim sapnbr As Variant Dim shortDe
  • Excel 公式或 VBA:在具有 2 列条件的单独表中查找匹配的地址 - 无辅助列

    我需要公式结构方面的帮助 我有2张桌子 我想找到 a 列和 b 列相等的匹配项并获取表 2 中的地址 它们将是唯一的条目 例如 项目信息表 A B C 1 Name Company Project 2 Chris Evans Apple I
  • 编辑Word书签更改字体

    我有一个使用 OpenXml 生成文档的 C 程序 它使用以下方法用值替换书签 private void FillBookmark BookmarkStart bookmark string value var text new Text
  • 使用 SpreadsheetLight 进行行计数

    我正在寻找一个类似于 DataTable Rows Count 的函数 它可以与 SLDocument 一起使用来找出有多少行中有数据 SpreadsheetLight 中有可用的东西吗 还有其他方法可以实现这一目标吗 Brendan SL
  • 连续工作表切换循环

    我有一个 Excel 电子表格来显示 SQL 数据图表 这些图表将显示在我们机加工车间的显示器上 该电子表格有 45 个选项卡 我需要在选项卡之间切换 每个选项卡间隔 10 秒 然后返回到第一个选项卡并重复循环 I found 如何使用 V
  • 使用 UiPath 循环 Excel 文件中的 URL

    我尝试了几种方法 但不知怎的 它们看起来不干净 我有一个 Excel 格式的 URL 文件 一列中有 400 多个 URL 我希望 UiPath 从该文件中读取并一一浏览这些 URL 我尝试让 导航到 从从 Excel 读取的变量中读取 但
  • 在 Excel 中的文件夹内的所有文件上添加一列

    我在一个文件夹内有 250 个不同的 excel 文件 具有相同的布局 其中包含列A to F 我需要在列上添加新列G 传统的方法是打开每个文件并在以下位置添加新列G 有没有使用 Excel 宏或任何其他工具的简单过程来完成此任务 这个链接
  • 尝试使用变量作为自动过滤器中的条件,并带有“不等于”<>,但无法使其工作

    我正在使用 Excel VBA 使用 不等于 表达式来过滤列表 如果我使用Criteria1 lt gt Bob 代码运行完美 但如果我将 Bob 更改为变量 代码将无法运行 这有效 ActiveSheet ListObjects Rpt
  • 是否有任何公式可用于将特定单元格复制指定次数?

    目前我正在处理一份数据 其中我有一个公司名称列表 例如 1 A 2 B 3 C 还有很多 需要的结果是 1 A 2 A 3 A 4 A 5 A 6 B 7 B 8 B 9 B 10 B 11 C 12 C 13 C 14 C 15 C 等等
  • 从嵌入的谷歌地图中提取标记坐标

    对此还很陌生 所以请耐心等待 我需要从嵌入的谷歌地图中提取标记坐标 示例链接是http www picknpay co za store search http www picknpay co za store search我想提取搜索时地
  • 如何将多个 Excel 工作表转换为 csv python

    我想转换所有的excel文档 xls 将工作表转换为 csv 如果 excel 文档只有一张工作表 那么我将进行如下转换 wb open workbook path1 sh wb sheet by name Sheet1 csv file
  • 消除多个 Elseif 语句

    我试图保持我的代码干净 特别是在用户表单中使用组合框 可能会有很多 if Elseif 语句 应该有一种更简单的方法 让一个组合框不再需要多页代码 是吗 现在如何完成的示例 Sub Example Dim Variable as Strin
  • 为什么在 Excel for Mac 中使用 VBA 的输入框不显示提示文本?

    我一直在构建一个使用 Excel 跟踪学生成绩的系统 我在 Windows 下编写了它 一切正常 但是当我在 Mac 版本的 Excel 最新版 本 15 24 我相信 上测试它时 InputBoxes 只显示输入数据的标题和文本框 不显示
  • Sharepoint Server 对于 Excel Services 或 Excel Web Access 是必需的吗

    Excel Services 和 Excel Web Access 随 Microsoft Office SharePoint Server 2007 一起提供 我想知道是否可以在不运行 Sharepoint Server 的情况下使用 E

随机推荐

  • JQuery UI - 无法更改模态对话框中日期选择器中的月份/年份

    Using 日期选择器里面一个模态对话框 不工作更改月份 年份Firefox 19 0 2 中的下拉列表请参阅 http jsfiddle net 469zV 2 http jsfiddle net 469zV 2 HTML div tit
  • Android进程调度

    我试图更好地理解 以便在创建 Android 应用程序 服务时确定潜在的互操作性问题对可靠性的影响 我想弄清楚进程优先级是如何确定的 服务和活动之间优先级的差异以及调度程序是否以不同方式对待它们的优先级 基本上 我试图深入了解某个活动或服务
  • 制作一个固定大小的 UIView,如 UISwitch(使用 IBDesignable)

    当我使用时本指南 http iphonedev tv blog 2014 12 15 create an ibdesignable uiview subclass with code from an xib file in xcode 6要
  • 禁用 Materialise Carousel 上的触摸

    看起来以前没有人问过这个问题 因为我几乎在互联网上寻找一个非常简单的答案 如何禁用在物化轮播上向左 向右滑动的功能 在 Materialize js 添加 编辑 var allowCarouselDrag true value functi
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i
  • 更改 Android 中突出显示文本的颜色

    我不确定这是否可能 也许有人可以纠正我 我在 Android 应用程序中有一个 EditText 视图 该视图在蓝色背景上有白色文本 当选择文本时 通过长按和编辑对话框 我希望突出显示为白色并将文本颜色更改为黑色 令人烦恼的是 似乎没有办法
  • React + 路由器 + Google 标签管理器

    我花了一些时间在 Quickcypher com 上开发 MVP 我想开始进行一些分析 它对于跟踪总访问量非常有用 但是当我尝试跟踪使用 React Router 的网站上的不同 URL 时 情况却出问题了 我的方法是这样的 设置一个在某些
  • Android VideoView 中纵向视频方向错误

    我在 Android 设备上以肖像方向拍摄新视频 如下所示 Intent intent new Intent android provider MediaStore ACTION VIDEO CAPTURE startActivityFor
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • firebase批量更新和onWrite触发同步

    我在同步两个 Firebase 云函数时遇到问题 第一个函数对多个文档执行批量更新 第二个函数由onWrite触发这些文档之一 为了便于说明 假设我有两个文档A and B 在两个单独的集合中 第一个云功能更新两个文档A and B有消防库
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns
  • 使用 Promise 语法编写同步代码有什么好处吗?

    有同步承诺这样的概念吗 使用 Promise 语法编写同步代码有什么好处吗 try foo bar a b bam catch e handleError e 可以写成类似的东西 但使用同步版本then foo then bar bind
  • 如何在 Caffe 的网络中出现多次损失?

    如果我在网络中定义多个损失层 从这些末端到网络的开头是否会发生多个反向传播 我的意思是 他们真的是这样工作的吗 假设我有这样的事情 Layer1 Layer2 Layer n Layer cls1 bottom layer n top cl
  • 为什么对gapi.client.drive.realtime.get的响应为空?

    下面是成功进行身份验证的页面 然后尝试使用drive realtime get 方法以三种方式获取现有实时文档的JSON 导出 console log 调用的结果显示在注释中 ID 为 EXISTING FILE ID 的文件存在 并且已使
  • 不明确的 XML 模式

    我正在尝试为 XML 生成一个非常简单的 XML 架构 类似于以下内容
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个
  • 如何在createQueryBuilder中使用通配符?

    在我的存储库类中 我使用 public function getItemsByTag tag qb this gt createQueryBuilder c gt select c gt where c tags LIKE bipolar
  • 在 OpenXML 中应用数字格式

    我正在尝试使用 OpenXML 从头开始 创建 Excel 电子表格 并且一切正常 将实际值转储到实际单元格中 但现在我正在尝试将数字格式应用于列 但遇到了问题 我有styles xml看起来像这样