【ClosedXML】 列の操作

 列の操作は行の操作と同じような感じで行えます。
// 1列取得
var column1 = sheet.Column(1);    // A列を取得
var column2 = sheet.Column("B");

// 複数列取得(A~C列を取得)
var columns1 = sheet.Columns(1, 3);
var columns2 = sheet.Columns("A", "C");
var columns3 = sheet.Columns("A:C");

// 不連続な列を取得
var columns4 = sheet.Columns("A:C, E:H, 10:12");
 1列のみ取得する場合はColumnメソッドを使用します。
 引数に取得したい列の番号か列名("A"とか"B"とか)を指定します。
 複数列を取得したい場合はColumnsメソッドを使用します。
 こちらもColumnメソッドと同様に列番号か列名で取得したい列範囲を指定します。
 ColumnメソッドではRowsメソッドと同様に不連続な列を取得することもできます。

 次に、列の削除について説明します。
sheet.Cell("A1").Value = 1;
sheet.Cell("B1").Value = 2;
sheet.Cell("C1").Value = 3;
sheet.Cell("D1").Value = 4;

sheet.Column("C").Delete();
 列の削除を行う為には、削除した列に対してDeleteメソッドを呼ぶだけです。
 このコードを実行すると以下の様になります。
列の削除

 最後に、列の挿入について説明します。
// 指定列の前に挿入
var addColumn1 = sheet.Column("C").InsertColumnsBefore(1);
addColumn1.Style.Fill.BackgroundColor = XLColor.Red;

// 指定列の後ろに挿入
var addColumn2 = sheet.Column("C").InsertColumnsAfter(1);
addColumn2.Style.Fill.BackgroundColor = XLColor.Red;
 指定した列の前に挿入したい場合はInsertColumnsBeforeメソッドを使用します。
 指定した列の後ろに挿入したい場合はInsertColumnsAfterメソッドを使用します。
 どちらのメソッドも引数には挿入する列数を指定します。

 列の削除や挿入を行ったときは、行の削除・挿入時と同じくセル参照の変更が行われますので注意してください。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

【ClosedXML】 行の操作

 今回は行操作について説明します。
 先ずは目的の行を取得する方法について説明します。
// ワークシートの1行目の最初のセルに値を入力
var row1 = sheet.Row(1);
row1.FirstCell().Value = "1行目最初のセル";

// ワークシートの3~5行目の列
var rows = sheet.Rows(3, 5);
var rows2 = sheet.Rows("3:5");  // Excelでの列指定と同じ方法でも取得できる
foreach (var r in rows)
{
    r.FirstCell().Value = "列3:5";
}

// 連続していない行を取得する
var rows3 = sheet.Rows("7:8, 10:12");
foreach (var r in rows3)
{
    r.FirstCell().Value = "不連続な列の取得";
}

// 使用されている列を取得
var usedRows = sheet.RowsUsed();
foreach (var r in usedRows)
{
    r.Style.Fill.BackgroundColor = XLColor.Red;
}
 1行だけ取得する場合はRowメソッドを使用します。
 引数には取得したい行番号(1から開始)を指定します。
 複数の行を取得したい場合はRowsメソッドを使用します。
 引数には取得範囲の最初と最後の行番号を指定するか、行範囲を文字列で指定します。
 行範囲の文字列指定ではExcelで行範囲を指定する時と同じ書式で範囲を指定します。
 文字列で指定する場合は不連続な行をまとめて取得することもできます。
 その場合は行範囲をカンマ区切りで入力します。
 今までに使用した(された)行を全て取得する場合はRowsUsedメソッドを使用します。
 このサンプルコードを実行すると以下の様になります。
行の取得


 次に、行の削除について説明します。
sheet.Cell("A1").FormulaA1 = "A3";  // A3の値を参照
sheet.Cell("A3").SetValue(100)
    .Style.Fill.SetBackgroundColor(XLColor.Blue);

// 行3を削除
sheet.Row(3).Delete();
 行を削除するには削除したい行でDeleteメソッドを使用するだけです。
 注意点は行を削除すると関数のセル参照が変更される点です。
 このサンプルコードではセルA1に"=A3"という関数を指定しています。
 その後、行3を削除することでセルA1に指定していた関数のセル参照が変更されます。
 このサンプルコードを実行すると以下の様になります。
行削除
 セルA1の関数が"=A2"に変更されているのが確認できます。


 最後に、行の挿入について説明します。
sheet.Cell("A3").Value = 100;
sheet.Cell("A1").FormulaA1 = "A3";

// 行2の上に行を挿入
var row1 = sheet.Row(2).InsertRowsAbove(1);
row1.Style.Fill.BackgroundColor = XLColor.Red;

// 行2の下に行を挿入
var row2 = sheet.Row(2).InsertRowsBelow(1);
row2.Style.Fill.BackgroundColor = XLColor.Blue;
 行の挿入は、挿入したい位置(行)でInsertRowsAboveメソッドまたはInsertRowsBelowメソッドを使用します。
 これらのメソッドの引数には挿入する行の数を指定します。
 InsertRowsAboveメソッドを使用した場合は、指定した行(サンプルだと行2)の上に行を挿入します。
 InsertRowsBelowメソッドを使用した場合は、指定した行(サンプルだと行2)の下に行を挿入します。
 このサンプルコードを実行すると以下の様になります。
行挿入
 行を挿入した場合も、削除した場合と同様にセル参照の編集が行われます。
 コードでは"=A3"を指定していたのに、作成されたシートでは"=A5"となっています。

 行等の削除・挿入を行う際はセル参照が変更される点に注意してください。

テーマ : プログラミング
ジャンル : コンピュータ

IEが起動できない【2015年2月21日】

 今日(2015/2/21 16:00頃)いきなりIEがクラッシュしました。(放置していたIEがいきなりクラッシュしました)。
 その後IEを起動してもすぐにクラッシュし、起動することすらできなくなりました。
 アドオンを無効にして起動してみたり、キャッシュを削除してみたりしましたがダメでした。
 調べてみると(情報は少ないですが)、どうやらノートンのアップデート後にIEが起動しなくなる現象が世界中で多発しているようです。
 今のところこの問題を解決する方法はまだないようです。
 色々試していたところ、Windowsストアアプリ版でなら起動できるようです。

 ストアアプリ版で起動させるには、まずIEを規定のブラウザにする必要があります。
 コントロールパネルの「ネットワークとインターネット」から「インターネットオプション」を選択します。
 「プログラム」タブを開き、IEを規定のブラウザに変更します。
IE以外を規定のブラウザにしている場合
 矢印のリンクをクリックすると以下の画面が表示されます。
IEを規定のブラウザにする
 プログラム一覧からInternet Explorerを選択し、矢印の項目をクリックして規定のブラウザに変更します。
 次に、もう一度インターネットオプションを開いて「プログラム」タブを選択します。
Winストアアプリ版を使用する
 矢印の「Internet Explorerタイルをクリックするとデスクトップで開く」のチェックを外してOKボタンを押してください。
 これで、スタート画面にあるIEタイルをクリックするとストアアプリ版でIEが開くようになります。

 私の環境(Windows8.1 64bit + Norton Internet Security)ではこれでIEが使用できるようになりました。
 問題が解決するまではこれで凌ごうと思います。
-------------------------------------------------------------
2015/2/22
 シマンテックから修正ファイルが提供されて問題は解決したようです。
 LiveUpdateを行えばIEが起動するようになりました。

【ClosedXML】 数式を使用する

 今回はClosedXMLで数式を扱う方法を説明します。
 先ずはセルに数式を指定する方法を説明します。
 セルに数式を代入するためにはFormulaA1プロパティ又はFormulaR1C1プロパティを使用します。
// 数式を指定する("="は省略可能)
sheet.Cell("A4").Value = "=A1 + A2";        // 文字列扱い
sheet.Cell("A5").FormulaA1 = "A1 + A2";
sheet.Cell("A6").FormulaA1 = "SUM(A1:A2)";
 サンプルコードの1行目のようにValueプロパティに数式を代入しても文字列扱いになり、数式として扱われません。(セルに"=A1 + A2"という文字列が代入されます。)
 数式として代入するにはFormulaA1かFormulaR1C1プロパティに数式を指定します。
 FormulaA1とFormulaR1C1はセルの指定方法が違うだけで使い方は同じです。
 もちろん関数も使用可能です。
 数式の計算結果が欲しい場合はセルのValueプロパティから取得できます。
// 数式の結果を使用する
sheet.Cell("A7").Value = "計算結果:" + sheet.Cell("A6").Value;

 次にセルを使用せずに関数の計算結果を取得する方法を説明します。
var sum = XLWorkbook.EvaluateExpr("SUM(10, 20, 30)");
 XLWorkbookのEvaluateExprメソッドを使用すれば、Excel関数を使用した計算結果を取得することができます。
 このメソッドを使用する場合はワークシートやセル等の値は使用できません。
 SUM(A1:A3)の様に数式を指定しても、このメソッドからはセルA1がどこにあるのかわからない為です。
 ワークシートやセルの値を使用したい場合はブックインスタンスやワークシートインスタンスのEvaluateメソッドを利用します。
/*
  * bookの情報を使って関数計算
  * ワークシート名が日本語だと例外になるっぽい
  */
var sum1 = book.Evaluate("SUM(Sheet01!A1:A3)");

// sheetの情報を使って関数計算
var sum2 = sheet.Evaluate("SUM(A1:A3)");
 Evaluateメソッドの場合、bookやsheetに含まれるセルの値を使用することができます。
 ただbook.Evalute()を使用する場合、シート名が日本語だと例外が発生するようです。
 Evaluateメソッド使用する場合はシート名は英数字にしておいた方が安全です。

 最後に、関数や数式を使用する場合はセル等の追加・削除に注意してください。
 個人的には数式を扱う場合はセル等の追加・削除は一切行わないほうが安全かなと思っています。(

テーマ : プログラミング
ジャンル : コンピュータ

【ClosedXML】 デフォルトスタイルを変更する

 今回はブックのデフォルトスタイルを変更する方法を紹介します。
 例として、フォントを「Calibri」から「MS ゴシック」に変更する方法を紹介します。

 ブックのフォントを変更する方法には2種類あります。
 1つはブックのスタイルを変更する方法。
 もう1つはデフォルトスタイルを変更する方法です。
 ここでは両方試してみてその違いを比較してみます。
 まずはブックのスタイルを変更する方法です。
var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "ブックのフォントを変更.xlsx");

using(var book = new XLWorkbook(XLEventTracking.Disabled))
{
    var sheet1 = book.AddWorksheet("変更前");
    book.Style.Font.FontName = "MS ゴシック";
    var sheet2 = book.AddWorksheet("変更後");

    book.SaveAs(filePath);
}
 ブックのスタイル変更を行う際の注意点は、ワークシートを作成する前にスタイル変更を行う必要があることです。
 上記のサンプルコードの場合、ワークシート「変更前」のフォントはブックのフォント名を変更した後でも「Calibri」のままです。
ブックのフォントを変更した場合
 この画像の「Sheet1」は作成されたブックを開いてワークシートを追加したものです。
 見ての通りフォントは「Calibri」になっています。
 ブックのフォントを変更した場合は、規定のフォントは変更されずにClosedXMLでワークシートを追加したときにワークシートのフォントが変更されているようです。

 次に、デフォルトフォントを変更した場合です。
var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "規定のフォントを変更.xlsx");

XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック";
using (var book = new XLWorkbook(XLEventTracking.Disabled))
{
    var sheet1 = book.AddWorksheet("シート");

    book.SaveAs(filePath);
}
 デフォルトスタイルはXLWorkbook.DefaultStyleで変更できます。
 今回はフォントを変更したいのでDefaultStyleのFont.FontNameを変更しています。
 これで以降作成されるブックのフォントは「MS ゴシック」になります。
規定のフォントを変更した場合
 ワークシート「シート」のフォントは「MS ゴシック」になっていますし、ブックを開いて追加した「Sheet1」も「MS ゴシック」になっています。

 ブックのスタイル変更はClosedXMLで操作するときだけの一時的なスタイル変更です。
 規定のスタイルまで変更したいのであればXLWorkbook.DefaultStyleを変更する必要があります。  

テーマ : プログラミング
ジャンル : コンピュータ

カレンダー
01 | 2015/02 | 03
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon