分類:[C#]
2014/08/29(Fri) 13:53:55 編集(投稿者)
お世話になっております。
Excelの印刷範囲についてつまってしまいました。
もしご存知の方がいらっしゃいましたらご教授お願いいたします。
次のようなデータのExcelが対象です。
(セルA1に1, セルB1に2・・・)
1 2 3 4 5 6 7 8 9 0
a b c d e f g h i j
k l m n o p q r s t
u v w x y z A B C D
E F G H I J K L M N
それを次のように3ページで印刷したいと考えています。
1 2 3 4 5 6 7 8 9 0
a b c d e f g h i j
-------------------
k l m n o p q r s t
-------------------
u v w x y z A B C D
E F G H I J K L M N
しかし、当方の実装では次のように印刷範囲が区切られてしまいます。
1 2 3 4 5 | 6 7 8 9 0
a b c d e | f g h i j
----------+----------
k l m n o | p q r s t
----------+----------
u v w x y | z A B C D
E F G H I | J K L M N
5列と6列の間の縦の区切りを消したい、
もしくは最後の右列まで伸ばしたい、
と考えていますがその方法がわかりませんでした。
(なお、縦線は青い点線、横線は青い実線でした)
ソースは以下のものです。
よろしくお願いいたします。
@ソース
-----------------------------------
Excel.Application ExcelApp = new Excel.Application();
Excel.Workbooks books = ExcelApp.Workbooks;
Excel.Workbook Book = books.Add();
Excel.Sheets sheets = Book.Sheets;
Excel.Worksheet sheet = (Excel.Worksheet)sheets[1];
// データ設定
for (int x = 1; x <= 20; x++)
{
for (int y = 1; y <= 100; y++)
{
SetData(sheet, x, y, (x + y).ToString());
}
}
// 印刷方向を横向き
// →縦線は多少右にずれたが、消えるにはいたらなかった
Excel.PageSetup page = sheet.PageSetup;
page.Orientation = Excel.XlPageOrientation.xlLandscape;
Marshal.ReleaseComObject(page);
// 改ページ解除
// →自動で挿入される改ページには効果がないのか、縦線は消せなかった
sheet.ResetAllPageBreaks();
// 任意の行で改ページ
SetKaiPage(sheet, 1, 6, 1, 6);
// 任意の行で改ページ
SetKaiPage(sheet, 1, 8, 1, 8);
Book.SaveAs(@"d:\tmp\a.xlsx");
Book.Close(false, Missing.Value, Missing.Value);
ExcelApp.Quit();
Marshal.ReleaseComObject(sheet);
if (Marshal.IsComObject(sheets)) Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(Book);
if (Marshal.IsComObject(books)) Marshal.ReleaseComObject(books);
Marshal.ReleaseComObject(ExcelApp);
-----------------------------------
@関数群
-----------------------------------
private void SetData(Excel.Worksheet sheet, int x, int y, String data)
{
Excel.Range range0 = sheet.Cells;
Excel.Range range1 = range0.Item[y, x];
range1.Value2 = data;
Marshal.ReleaseComObject(range1);
Marshal.ReleaseComObject(range0);
}
private void SetKaiPage(Excel.Worksheet sheet, int startX, int startY, int endX, int endY)
{
Excel.Range range0 = sheet.Cells;
Excel.Range range1 = range0.Item[startY, startX];
Excel.Range range2 = range0.Item[endY, endX];
Excel.Range range3 = sheet.Range[range1, range2];
range3.PageBreak = (int)Excel.XlPageBreak.xlPageBreakManual;
Marshal.ReleaseComObject(range0);
Marshal.ReleaseComObject(range1);
Marshal.ReleaseComObject(range2);
Marshal.ReleaseComObject(range3);
}
-----------------------------------
@環境
-----------------------------------
IDE :
Visual Studio Professinal 2012 (11.0.60610.01 Update3)
Framework :
.NET Framework 4.5.50709
参照設定に追加 :
Microsoft.Office.Interop.Excel (14.0.0.0)
Microsoft.Iffice.Core(Microsoft Office 15.0 Object Library)
Office :
Office Home and Business 2010
-----------------------------------