Excel 2007 ドキュメントの向きを横向きに変更する方法を教えてください。これに関する有益な情報は見つかりませんでした。これには OpenXML SDK を使用しています。私が見つけた唯一のこと: 新しいワークシートを作成するときは、PageSetup() { Orientation = OrientationValue.Landscape}; を設定する必要があります。しかし、これは役に立ちません。誰でもこの問題を解決できますか? ありがとうございました。
2 に答える
OrientationValue.Landscapeで正しい方向に進んでいます。すべてのワークシートを横向きに設定するには、すべてのワークシートをループして、PageSetup要素にorientation属性を設定する必要があります。
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枚すべてのシートにlandscapeプロパティが設定されます(空白のExcel 2007ドキュメントのデフォルトであるため3枚)。次に、変更を保存して、ストリームをバイト配列として返します。これは、ファイルをダウンロードできるようにするためです。手動でファイルを最初から作成するのではなく、空のファイルを作成して、このようにメモリに開くことをお勧めします。それはあなたが非常に多くのnullポインタを取得している理由を説明するでしょう。