excel-2007 - 如何通过 OpenXML sdk 将 excel 2007 文档方向更改为横向

标签 excel-2007 openxml-sdk spreadsheetml

我需要帮助将 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/

相关文章:

c# - Open XML SDK 读取大型 excel 文件的性能如何?

excel - Excel 2003 电子表格 XML 中的多个 Pane

c# - 为什么 Excel Interop 会在处理文件后删除图像?

vba - 将 '1' 添加到范围内的所有单元格

function - VBA:Excel 范围总是显示为空?

namespaces - XLSX-如何去掉默认的命名空间前缀 x :?

excel-2007 - 在工作簿之间切换时,ms excel 中出现烦人的哔哔声

C# OpenXML (Word) 表格自动适应窗口

c# - OpenXML SpreadsheetML 横向文本

excel - OpenXML SDK 电子表格入门套件