Вы находитесь на правильном пути с OrientationValue.Landscape.Вам просто нужно пройтись по всем рабочим листам и установить атрибут ориентации в элементе PageSetup, чтобы установить все рабочие листы в альбомной ориентации:
public static void SetLandscape(SpreadsheetDocument document)
{
WorkbookPart workbookPart = document.WorkbookPart;
IEnumerable<string> worksheetIds = workbookPart.Workbook.Descendants<Sheet>().Select(w => w.Id.Value);
WorksheetPart worksheetPart;
foreach (string worksheetId in worksheetIds)
{
worksheetPart = ((WorksheetPart)workbookPart.GetPartById(worksheetId));
PageSetup pageSetup = worksheetPart.Worksheet.Descendants<PageSetup>().FirstOrDefault();
if (pageSetup != null)
{
pageSetup.Orientation = OrientationValues.Landscape;
}
worksheetPart.Worksheet.Save();
}
workbookPart.Workbook.Save();
}
Шаблон, который я использую для манипулирования документами, - это сначала открыть Excel и создатьпустой документ и сохраните его.Затем я использую свой код, чтобы открыть этот документ и выполнить любую работу, которая мне нужна.Таким образом, мне не нужно беспокоиться о создании элементов и о том, что все должно быть в нужном месте.Код, который я использую для достижения этой цели, находится здесь:
public byte[] Export(string pathToExcelFile)
{
// Open the file from the drive
byte[] byteArray = File.ReadAllBytes(pathToExcelFile)
using (MemoryStream stream = new MemoryStream())
{
stream.Write(byteArray, 0, (int)byteArray.Length);
using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true))
{
// Do all work on excel doc here
SetLandscape(spreadsheetDoc);
// Save all the changes
}
return stream.ToArray();
}
}
Итак, здесь я открываю файл с диска в поток памяти, чтобы я мог выполнить все изменения в памяти.Затем я передаю этот документ в метод SetLandscape, и он устанавливает свойство ландшафта на всех трех листах (3 листа, поскольку это значение по умолчанию для пустого документа Excel 2007).Затем я сохраняю свои изменения и возвращаю поток в виде байтового массива.Я делаю это, чтобы файл мог быть загружен.Я рекомендую вам создать пустой файл и открыть его в памяти, как это, вместо того, чтобы вручную пытаться создать файл с нуля.Это объясняет, почему вы получаете столько нулевых указателей.