スプレッドシート管理の操作
スプレッドシート管理の操作
Workbook クラスは、Aspose.Cells FOSS for .NET におけるすべてのスプレッドシート操作のルートオブジェクトです。WorksheetCollection、定義名、および保存/読み込みライフサイクルへのアクセスを提供します。本ガイドでは、フォールトトレラントなロード、ワークシートの編成、印刷レイアウトの設定、行/列/セルのレイアウト制御について説明します。
修復オプション付きブックの読み込み
既存の XLSX ファイルを読み込むには、Workbook コンストラクタにファイルパスを渡します。TryRepairPackage と TryRepairXml を true に設定した LoadOptions オブジェクトを提供して、軽度の構造破損があるファイルの復旧を試みます。ファイルが復旧不可能な場合は、WorkbookLoadException がスローされます。
using Aspose.Cells_FOSS;
var options = new LoadOptions
{
TryRepairPackage = true,
TryRepairXml = true,
};
try
{
var wb = new Workbook("data.xlsx", options);
Console.WriteLine("Sheets: " + wb.Worksheets.Count);
Console.WriteLine("Cell A1: " + wb.Worksheets[0].Cells["A1"].StringValue);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Unrecoverable: " + ex.Message);
}ワークシートの追加と編成
Workbook.Worksheets は WorksheetCollection を返します。Add(name) を呼び出して名前で新しいワークシートを追加します;このメソッドは新しいシートのインデックスを返します。ワークシートはゼロベースのインデックスまたは名前でアクセスできます。WorksheetCollection.ActiveSheetName を設定して、ファイルを開いたときにアクティブになるタブを制御します。
using Aspose.Cells_FOSS;
var wb = new Workbook();
// Rename the default sheet
wb.Worksheets[0].Name = "Summary";
// Add sheets
var dataIdx = wb.Worksheets.Add("Data");
var archiveIdx = wb.Worksheets.Add("Archive");
// Set active sheet
wb.Worksheets.ActiveSheetName = "Data";
// Write to sheets by name
wb.Worksheets["Summary"].Cells["A1"].PutValue("Overview total");
wb.Worksheets["Data"].Cells["A1"].PutValue("Raw rows start here");
wb.Save("organised.xlsx");
// Verify
var loaded = new Workbook("organised.xlsx");
Console.WriteLine("Active: " + loaded.Worksheets.ActiveSheetName);
Console.WriteLine("Sheet count: " + loaded.Worksheets.Count);ワークシートの非表示と表示
シートを削除せずに非表示にするには、Worksheet.VisibilityTypeをVisibilityType.Hiddenに設定します。非表示のシートはXLSXファイルに保持され、VisibilityType.Visibleを設定することで再表示できます。タブの色はWorksheet.TabColorで設定します。
using Aspose.Cells_FOSS;
var wb = new Workbook();
wb.Worksheets[0].Name = "Visible";
var hiddenIdx = wb.Worksheets.Add("Internal");
var hiddenSheet = wb.Worksheets[hiddenIdx];
hiddenSheet.VisibilityType = VisibilityType.Hidden;
hiddenSheet.Cells["A1"].PutValue("Internal data");
wb.Worksheets["Visible"].TabColor = Color.FromArgb(255, 70, 130, 180);
wb.Save("hidden.xlsx");ページ設定の構成
Worksheet.PageSetupはすべての印刷関連プロパティを公開します。PageOrientationTypeを使用して縦向きと横向きを切り替えます。PaperSizeTypeで用紙サイズを選択します。PrintAreaで印刷範囲を定義し、PrintTitleRows/PrintTitleColumnsで繰り返し行/列を設定し、AddHorizontalPageBreakとAddVerticalPageBreakで手動改ページを追加します。
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
// Sample data
for (var r = 0; r < 60; r++)
ws.Cells[r, 0].PutValue("Row " + (r + 1));
var ps = ws.PageSetup;
ps.Orientation = PageOrientationType.Landscape;
ps.PaperSize = PaperSizeType.PaperA4;
ps.LeftMarginInch = 0.5d;
ps.RightMarginInch = 0.5d;
ps.TopMarginInch = 0.75d;
ps.BottomMarginInch = 0.75d;
ps.PrintArea = "$A$1:$H$60";
ps.PrintTitleRows = "$1:$1";
ps.CenterHeader = "Sales Report";
ps.LeftFooter = "Confidential";
ps.RightFooter = "Page &P of &N";
ps.PrintGridlines = true;
ps.CenterHorizontally = true;
ps.AddHorizontalPageBreak(30);
wb.Save("paged.xlsx");
var loaded = new Workbook("paged.xlsx");
Console.WriteLine("Orientation: " + loaded.Worksheets[0].PageSetup.Orientation);
Console.WriteLine("Print area: " + loaded.Worksheets[0].PageSetup.PrintArea);行と列のサイズ設定
インデックスでWorksheet.Cells.Rowsにアクセスして、Rowオブジェクトを取得します。Row.Heightを(ポイントで)設定して行の高さを制御します。Row.IsHiddenをtrueに設定して行を非表示にします。インデックスでWorksheet.Cells.Columnsにアクセスして、Columnオブジェクトを取得します。Column.Widthを(文字単位で)設定し、Column.IsHiddenも設定します。
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
// Populate data
for (var r = 0; r < 5; r++)
for (var c = 0; c < 4; c++)
ws.Cells[r, c].PutValue($"R{r + 1}C{c + 1}");
// Row height and visibility
ws.Cells.Rows[0].Height = 28d; // Header taller
ws.Cells.Rows[3].IsHidden = true; // Hide row 4
// Column width and visibility
ws.Cells.Columns[0].Width = 22d;
ws.Cells.Columns[3].IsHidden = true;
wb.Save("layout.xlsx");
var loaded = new Workbook("layout.xlsx");
Console.WriteLine("Row 0 height: " + loaded.Worksheets[0].Cells.Rows[0].Height);
Console.WriteLine("Col 0 width: " + loaded.Worksheets[0].Cells.Columns[0].Width);セルの結合
Worksheet.Cells.Merge(firstRow, firstColumn, totalRows, totalColumns)を呼び出して、連続した矩形ブロックを単一のセルに結合します。結合されたセルは左上セルの値を継承します。ロードされたブック内のすべての結合領域を取得するには、Worksheet.Cells.MergedCellsを使用します。
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
// Title spanning A1:D1
ws.Cells["A1"].PutValue("Quarterly Sales Report");
ws.Cells.Merge(0, 0, 1, 4);
// Section header spanning A3:D3
ws.Cells["A3"].PutValue("Region: North");
ws.Cells.Merge(2, 0, 1, 4);
// Column headers
ws.Cells["A4"].PutValue("Product"); ws.Cells["B4"].PutValue("Q1");
ws.Cells["C4"].PutValue("Q2"); ws.Cells["D4"].PutValue("Q3");
wb.Save("report.xlsx");
var loaded = new Workbook("report.xlsx");
Console.WriteLine("Merged regions: " + loaded.Worksheets[0].Cells.MergedCells.Count);ヒントとベストプラクティス
- Excel でファイルを開いたときに正しいタブが選択されるように、
WorksheetCollection.ActiveSheetNameを使用します。 - ページ余白をインチで設定します(
LeftMarginInch,TopMarginInch)— これらは整数ではなく浮動小数点値です。 - 行/列を非表示にする(
IsHidden = true)ことでデータは保持されますが、行を削除するとデータは永久に失われます。 - 各変更の後ではなく、バッチ操作の最後に一度だけ
Workbook.Save()を呼び出してください。 - データシートではセルの結合は控えめに行ってください — 結合された領域はソートやオートフィルタが結合エリア全体で正しく機能しなくなります。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
ロード時の WorkbookLoadException | XLSX 内の ZIP または XML が破損している | LoadOptions.TryRepairPackage = true と TryRepairXml = true を設定します |
Add(name) が誤ったインデックスを返す | シート名をインデックスとして使用する | Add() が整数インデックスを返します。そのインデックスを使用して新しいシートにアクセスしてください |
| 行の高さが保持されません | 高さが0または負の値に設定されています | 28d のような正の double 値を使用してください |
| 結合セルが誤った値を表示しています | 結合範囲の左上以外のセルに値が書き込まれました | Cells.Merge() を呼び出す前に、左上のセルに値を書き込んでください |
| 改ページが表示されません | AddHorizontalPageBreak が Save() の後に呼び出されました | 呼び出す前にページ区切りを設定してください Save() |
FAQ
シートは最大何枚まで追加できますか?
XLSX 形式は、1 つのブックあたり最大 1024 シートをサポートしています。実際の制限は、利用可能なメモリとファイルサイズに依存します。
ブック間でワークシートをコピーできますか?
現在の API インターフェースでは、ブック間のシートコピー用の CopyTo メソッドが提供されていません。両方のファイルを読み込み、セルごとにデータを転送してください。
ワークシートの順序を変更するにはどうすればいいですか?
WorksheetCollection のインデックスアクセスを利用し、シート名を変更して論理的な順序を変更してください。直接的な位置移動は、現在の API インターフェースにはありません。
PageSetup は余白にどの単位を使用しますか?
すべての余白プロパティ(LeftMarginInch、TopMarginInch など)は、double 値としてインチで表されます。
Cells.Merge は既存のセルデータを置き換えますか?
左上のセルの値は保持され、他の結合されたセルの値はクリアされます。
API Reference 概要
| クラス / メソッド | 説明 |
|---|---|
Workbook | ルートオブジェクト — ワークブックを作成、読み込み、保存 |
Workbook.Worksheets | WorksheetCollection を返します |
Workbook.Save(path) | ワークブックを XLSX に永続化 |
WorksheetCollection.Add(name) | 名前で新しいワークシートを追加 |
WorksheetCollection.ActiveSheetName | ファイルを開いたときにアクティブなタブ |
Worksheet.VisibilityType | VisibilityType.Hidden または Visible |
Worksheet.TabColor | タブの色 (Color) |
Worksheet.PageSetup | 印刷レイアウト設定 |
PageSetup.Orientation | PageOrientationType.Landscape または Portrait |
PageSetup.PaperSize | PaperSizeType.PaperA4、など. |
PageSetup.AddHorizontalPageBreak(row) | 横方向のページ区切りを挿入 |
Cells.Rows[index].Height | ポイント単位の行の高さ |
Cells.Rows[index].IsHidden | 行の非表示/表示 |
Cells.Columns[index].Width | 文字単位の列幅 |
Cells.Columns[index].IsHidden | 列の非表示/表示 |
Cells.Merge(row, col, numRows, numCols) | 長方形ブロックをマージする |
Cells.MergedCells | シート内の結合された領域の一覧 |
LoadOptions.TryRepairPackage | ロード時に ZIP 修復を試みる |
LoadOptions.TryRepairXml | ロード時に XML 修復を試みる |
WorkbookLoadException | ファイルが回復不可能な場合にスローされます |