我需要帮助将 excel 2007 文档方向更改为横向。我没有找到任何有用的信息。我为此使用 OpenXML SDK。我发现的唯一一件事:当我创建一个新的工作表时,我应该设置 PageSetup() { Orientation = OrientationValue.Landscape}; 但这无济于事。任何人都可以帮助解决这个问题吗?谢谢你。
问问题
5211 次
2 回答
3
我解决了:
PageSetup pageSetup = worksheetPart.Worksheet.Descendants<PageSetup>().FirstOrDefault();
if (pageSetup == null)
{
pageSetup = new PageSetup();
pageSetup.Orientation = OrientationValues.Landscape;
worksheetPart.Worksheet.AppendChild(pageSetup);
}
于 2014-03-27T20:43:38.500 回答
3
您在 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 文档的默认设置)。然后我保存我的更改并将流作为字节数组返回。我这样做是为了可以下载文件。我建议您创建一个空白文件并将其打开到内存中,而不是手动尝试从头开始构建文件。这可以解释为什么你会得到这么多空指针。
于 2010-07-13T13:44:57.750 回答