如何使用Open XML SDK 2.5设置活动工作表
本文关键字:设置 活动 工作 何使用 Open XML SDK | 更新日期: 2023-09-27 17:57:27
使用此处的示例如何在工作簿中复制工作表
我已经成功地在excel文件中克隆/复制了工作表,但当我打开excel时,第二张工作表是活动的(可见)工作表。我还没能找到一处可以做这件事的房产。。。。。有什么方法可以指定激活的工作表吗?
我试图通过打开并编辑文件中的第一张工作表来强制它,以为这是最后一张活动的编辑过的工作表,但这也不起作用。
任何帮助都会很棒。TIA-
更新:查看将.xlsx重命名为.zip时创建的工作簿.xml时,我遇到了"activeTab"属性。对我的代码进行了快速更改,似乎工作得很好
public void SetFirstSheetInFocus(String xlsxFile)
{
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(xlsxFile, true))
{
//Get a reference to access the main Workbook part, which contains all references
WorkbookPart _workbookPart = spreadSheet.WorkbookPart;
if (_workbookPart != null)
{
WorkbookView _workbookView = spreadSheet.WorkbookPart.Workbook.BookViews.ChildElements.First<WorkbookView>();
if (_workbookView != null)
{
_workbookView.ActiveTab = 0; // 0 for first or whatever tab you want to use
}
// Save the workbook.
_workbookPart.Workbook.Save();
}
}
}
如果工作表的名称在变量中
sheetName
您可以将具有该名称的工作表设置为活动状态,如下所示:
using (var spreadsheetDoc = SpreadsheetDocument.Open(emptyHIPTemplatePath, true /* isEditable */, new OpenSettings { AutoSave = false }))
{
var workbookPart = spreadsheetDoc.WorkbookPart;
var workBook = spreadsheetDoc.WorkbookPart.Workbook;
var sheet = workBook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);
var sheetIndex = workBook.Descendants<Sheet>().ToList().IndexOf(sheet);
var workBookView = workBook.Descendants<WorkbookView>().First();
workBookView.ActiveTab = Convert.ToUInt32(sheetIndex);
...
workBook.Save();
}
来自谭的书:
SheetId属性无法确定顺序。的顺序将Sheet类附加到Sheets类中。
添加图纸时,它将获得下一个索引,但单个图纸没有索引。添加完图纸后,OpenXML会为其提供索引。再次,来自Vincent Tan的书:
假设您有3个工作表,分别命名为Sheet1、Sheet2和Sheet3。但是,当附加相应的Sheet类时按照Sheet2、Sheet3和Sheet1的顺序。