使用此处的示例How to Copy a Worksheet within a Workbook
我已经成功地能够在我的excel文件中克隆/复制工作表,但是当我打开excel时,第二张工作表是活动(可见)工作表。我无法找到一个可以做什么的属性.....有没有办法指定哪些工作表是活动的?
我试图通过打开和编辑文件中的第一张纸来强制它,因为它认为它是最后编辑的工作表,但是也没有用。
任何帮助都会很棒。 TIA
更新:查看将.xlsx重命名为.zip时创建的workbook.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();
}
}
}
答案 0 :(得分:7)
如果工作表的名称在变量
中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();
}
答案 1 :(得分:1)
来自Vincent Tan的书:
SheetId属性不确定订单。的顺序 将Sheet类附加到Sheets类,确实。
添加工作表时,它会获取下一个索引,但单个工作表没有索引。完成添加工作表后,OpenXML为其提供索引。再一次,来自Vincent Tan的书:
假设您有3个名为Sheet1,Sheet2和Sheet3的工作表。 但是,当您附加相应的Sheet类时,您就完成了它 如Sheet2,Sheet3和Sheet1,按顺序。