我想将Excel视图从普通设置为 PageLayout 。在Java(PIO)中有一个getCTWorksheet方法,但这种方法似乎不存在于C#NPOI实现中。
请建议一种从ISheet对象获取CT_WorkSheet的方法,并在Excel工作表上设置相应的视图。
以下是我当前在直接创建的CT_Worksheet对象上设置正确视图的方法。
CT_Worksheet ct = new CT_Worksheet();
ct = (CT_Worksheet)sheet;
CT_Workbook wrkb = wbb.GetCTWorkbook();
CT_SheetView view = ct.sheetViews.GetSheetViewArray(0);
view.view = ST_SheetViewType.pageLayout;
答案 0 :(得分:2)
不幸的是,NPOI设计人员使用GetCTWorksheet()
方法内部,因此您无法在库外使用它。这可能也是POI开发人员的意图,但Java没有包私有方法的概念。
由于似乎没有正式的方法来访问内部类,我们只需使用 reflection 来访问它们。
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("Sheet 1");
var row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue("This is a test");
// Use reflection go call internal method GetCTWorksheet()
MethodInfo methodInfo = sheet.GetType().GetMethod("GetCTWorksheet", BindingFlags.NonPublic | BindingFlags.Instance);
var ct = (CT_Worksheet) methodInfo.Invoke(sheet, new object[] {});
CT_SheetView view = ct.sheetViews.GetSheetViewArray(0);
view.view = ST_SheetViewType.pageLayout;