如何使用OpenXML SDK访问Excel工作表中的FormControlcheckbox

我有一个电子表格,在工作表上的各个单元格中有一些checkbox,我需要从ac#程序中获取(选中/取消选中)的值。

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

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

当我使用SDK时,我也可以看到WorkSheetPart上有一个ControlPropertiesParts集合,它列出了所有的checkbox。

我的问题是,我怎么find哪个checkbox是在哪个单元格中,或者至less与哪个单元格有关?

我也发现了集合wsPart.ControlPropertiesParts.First()。DrawingsPart .WorkSheetDrawing.DrawingsPart.WorkSheetDrawing

这个集合似乎有每个checkbox的替代内容,如果我深入下钻,我可以find看起来相对于表单元格的checkbox位置的锚点。 然而,列和行ID似乎并不完全匹配,我怀疑偏移值也可能与它有关。

如果有人能指出我如何将checkbox映射到正确的行/单元格的正确方向,我将非常感激。

感谢您的任何帮助。

问候保罗

我有一个解决scheme,它只包含逻辑(属性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<Control>().FirstOrDefault(c => c.Name == controlName); var controlProperies = (ControlPropertiesPart)wsPart.GetPartById(control.Id); bool isChecked = controlProperies.FormControlProperties.Checked == "Checked"; 

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