【问题标题】:How to access a FormControl checkbox in an Excel sheet using OpenXML SDK如何使用 OpenXML SDK 访问 Excel 工作表中的 FormControl 复选框
【发布时间】:2016-10-15 08:49:06
【问题描述】:

我有一个电子表格,在工作表的各个单元格中有许多复选框,我需要从 c# 程序中获取(选中/未选中)的值。

我正在使用 OpenXML SDK v2.5 和相关的工具箱。

使用工具箱,我可以看到复选框控件是 AlternateControlParts 集合的一部分。这些不是 ActiveX 复选框,而是通过 Excel 中的开发人员选项卡添加的表单控件。

当我使用 SDK 时,我还可以看到 WorkSheetPart,它上面有一个 ControlPropertiesParts 集合,其中列出了所有复选框。

我的问题是,我如何找到哪个复选框在哪个单元格中或至少与哪个单元格相关?

我也找到了收藏 wsPart.ControlPropertiesParts.First().DrawingsPart .WorkSheetDrawing.DrawingsPart.WorkSheetDrawing

这个集合似乎有每个复选框的替代内容,如果我进一步深入,我可以找到锚点,这些锚点似乎给出了复选框相对于工作表上单元格的位置。但是,col 和 row Id 似乎并不完全匹配,我怀疑 Offset 值也可能与它有关。

如果有人能指出如何将复选框映射到正确的行/单元格的正确方向,我将不胜感激。

感谢您的帮助。

问候 保罗

【问题讨论】:

  • 你找到解决办法了吗?
  • @Paul Marsden - 你找到解决方案了吗?我看起来一样。

标签: excel checkbox openxml-sdk


【解决方案1】:

我有一个解决方案,它只包含逻辑(属性 FormControlProperties 自 Office 2010 起可用:

        SpreadsheetDocument document;
        string sheetName = "sheetName";
        string controlName = "Option Button 5";
        ...
        var wbPart = document.WorkbookPart;
        var theSheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);
        var wsPart = (WorksheetPart)wbPart.GetPartById(theSheet.Id);
        var control = wsPart.Worksheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Control>().FirstOrDefault(c => c.Name == controlName);
        var controlProperies = (ControlPropertiesPart)wsPart.GetPartById(control.Id);
        bool isChecked = controlProperies.FormControlProperties.Checked == "Checked";

但如果可以编辑 Excel 文件,将 FormControl 值映射到单元格并读取单元格值会更简单。

【讨论】:

  • 这对我不起作用。 wsPart.Worksheet.Descendants() 为空。
  • 我迟到了几年,但@Elmue 你试过 ();?
  • 我完全放弃了 OpenXML。我只是在这个完全没有文档(没有示例代码)并且不起作用的废话上浪费了我的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多