【问题标题】:How can I get an Excel worksheet's used range with OpenXML?如何使用 OpenXML 获取 Excel 工作表的使用范围?
【发布时间】:2017-04-13 20:38:08
【问题描述】:

我需要在新工作表中获取已使用的单元格范围。例如:

A1:AY55

在 Excel VBA 中,这可以通过恰当命名的 UsedRange 属性获得。 OpenXML 中是否有等价物?

【问题讨论】:

    标签: c# excel openxml openxml-sdk


    【解决方案1】:

    它可以在SheetDimension 类中找到,该类可以作为Worksheet 的属性找到。以下代码会将使用的范围写入控制台:

    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, false))
    {
        WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
        //get the correct sheet
        Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").First();
        WorksheetPart worksheetPart = workbookPart.GetPartById(sheet.Id) as WorksheetPart;
        Console.WriteLine(worksheetPart.Worksheet.SheetDimension.Reference);
    }
    

    【讨论】:

    • SheetDimension 为空,因为工作表是新的。这仅适用于现有文件还是有办法为新生成的工作表获取它?
    • 对于新生成的工作表,除非您通过 OpenXml 自己编写,否则该值将不存在。不幸的是,OpenXml 中没有任何东西可以自动生成该信息。如果工作表是新的,这是否意味着您正在生成它?在那种情况下,你不是已经知道范围了吗?
    • 我知道数字范围,但正在寻找一种内置方法来获取与 VBA 一样的地址范围。如果这没有实现,你有 a great answer for generating Excel column names 我会工作的。
    • 太好了,谢谢@EricEskildsen - 祝你的项目好运。
    • 感谢您的帮助。如果这是新工作表的常用路径,我建议添加指向您的其他答案的链接以增加曝光率。编辑:未来的读者,另见this answer,它专门用于生成列名而不是相反。
    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多