InsertメソッドでCopyOriginを指定してみた

  • LINEで送る

先の記事とも関連しますが、Visual StudioのC#でExcelファイルをゴリゴリいじっていました。

Visual StudioのPro版があればCrystal Reportを使えるのですが、いかんせん費用を掛けられないので使用したのはVisual Studio Express版です。となると、帳票絡みはAccessやExcelのお世話になるのですが、私は普段から慣れ親しんでいる(?)Excelを選択しました。

名前の管理を行う

Excel帳票を扱う上で如何に楽をするか、を考えると元となるExcelファイル上で名前を管理した方が断然いいです。レイアウトの変更があっても名前管理上でセル位置を補完してくれるのが最大の旨味です。

ヘッダ項目は固定のはずなので、少なくとも帳票ヘッダに関するセルは名前付けしたほうがいいでしょう。

C#上でのセルの参照

私の場合はCOM参照としましたので、

を挿入しています。
Excelファイルのセル名称を使ったアクセスは以下のようになります。

だいぶ端折っていますが、大枠の流れはこのような感じです。

C#上でのセルを挿入したい

帳票を扱う上では明細が増えたときにレイアウトを保持する上でも「追加」ではなく、「挿入」を行いたいものです。行の挿入は「Rangeメソッド中のInsertメソッド」利用します。
MSDNを覗いてみるとこんなことが書いてあります。

「CopyOrigin」の項目を見ると「コピー元」とあります。この一文だけを読むとなんだかInsertしながらコピー元を複写してくれそうな印象ですよね。

でも実際は異なります。

「CopyOrigin」に指定できるのは「XlInsertFormatOrigin列挙体」の「xlFormatFromRightOrBelow」か「xlFormatFromLeftOrAbove」だけです。つまり、挿入対象範囲の前後左右からしかコピーできないのです。しかもコピーされるのは書式だけという優れもの(?)です。

書式だけ、と書きましたが色々試したところ、罫線とセルの連結はコピーされませんでした。複雑な書式を持ったセルやRangeを挿入したい場合は

のように範囲をコピーしてから挿入(Insert)すると意図した書式で挿入&複写されます。
この場合、値までコピーされているので、

のように初期化を行ってください。(本件ではEmptyを初期値としています)

Copyメソッドの副作用

Copyメソッドはクリップボードを介してやり取りするため、クリップボードの更新が発生します。
作業中にクリップボードを更新されたくない場合は今回の方法は利用できません。

参考までにどうぞ。

  • LINEで送る

SNSでもご購読できます。

役に立ったよ!

本記事が役に立った!と思っていただけましたら下記ボタンからチップをお受けしております。

 

E.P.ラボにチップ

スポンサー リンク

コメントを残す

*

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

%d人のブロガーが「いいね」をつけました。