// Read the first worksheet from a template document and extract and store // the page settings for later use protected static void SetPageOptionsFromTemplate(Application app, Workbooks workbooks, Hashtable options, ref Hashtable templatePageSetup) { if (!HasTemplateOption(options)) { return; } try { var template = workbooks.Open((string)options["template"]); AddCOMDelay(options); if (template != null) { // Run macros from template if the /excel_template_macros option is given if ((bool)options["excel_template_macros"]) { var eventsEnabled = app.EnableEvents; app.EnableEvents = true; template.RunAutoMacros(XlRunAutoMacro.xlAutoOpen); app.EnableEvents = eventsEnabled; } var templateSheets = template.Worksheets; if (templateSheets != null) { // Copy the page setup details from the first sheet or chart in the template if (templateSheets.Count > 0) { PageSetup tps = null; var firstItem = templateSheets[1]; if (firstItem is _Worksheet) { tps = ((_Worksheet)firstItem).PageSetup; } else if (firstItem is _Chart) { tps = ((_Chart)firstItem).PageSetup; } var tpsType = tps.GetType(); for (int i = 0; i < templateProperties.Length; i++) { var prop = tpsType.InvokeMember(templateProperties[i], System.Reflection.BindingFlags.GetProperty, null, tps, null); if (prop != null) { templatePageSetup[templateProperties[i]] = prop; } } Converter.ReleaseCOMObject(firstItem); } ReleaseCOMObject(templateSheets); } CloseExcelWorkbook(template); } ReleaseCOMObject(template); } finally { } }
// Load stored worksheet properties into the page setup protected static void SetPageSetupProperties(Hashtable tps, PageSetup wps) { if (tps == null || tps.Count == 0) { return; } var wpsType = wps.GetType(); for (int i = 0; i < templateProperties.Length; i++) { object[] value = { tps[templateProperties[i]] }; try { wpsType.InvokeMember(templateProperties[i], System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.SetProperty, Type.DefaultBinder, wps, value); } catch (Exception) { Console.WriteLine("Unable to set property {0}", templateProperties[i]); } } }