我需要帮助将 Excel 2007 文档方向更改为横向。我没有找到任何关于此的有用信息。我为此使用 OpenXML SDK。 我唯一发现的是:当我创建一个新的工作表时,我应该设置 PageSetup() { Orientation = OrientationValue.Landscape};但这没有帮助。 有人可以帮助解决这个问题吗? 谢谢。
最佳答案
您的 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 文档的默认值)上设置横向属性。然后,我保存更改并将流作为字节数组返回。我这样做是为了可以下载该文件。我建议您创建一个空白文件并将其打开到内存中,如下所示,而不是手动尝试从头开始构建该文件。这可以解释为什么你会得到这么多空指针。
关于excel-2007 - 如何通过 OpenXML sdk 将 excel 2007 文档方向更改为横向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237494/