- - PR -
EXCEL出力を高速にする方法
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-10-17 10:03
いつも参考にさせていただいてます。
現在ASP.NETでEXCEL帳票ツールを開発しています。 EXCEL側ではマクロなどは使わず、データベースから取得してきたデータを.NET側で EXCELシートに埋め込んで、レコード数が複数になった場合は明細行(DETAILみたいなもの) をどんどんEXCELシートに挿入していく、 とこんな感じなのですが レスポンスが非常に悪いんです。 レコード件数がそれほど無い場合は気にはならないのですが レコード数が何千件にもなると処理が全然終わらないのです。 EXCEL出力処理を高速にするコツなどがあればご教授願います。 | ||||||||
|
投稿日時: 2003-10-17 10:35
EXCELシートへの埋め込みってどうやってるんでしょうか? Excelのマクロでやるのと同じ感じですかね(.NET側から呼び出してるだけで)?
Excelのマクロでやるのと同じ感じの操作の場合は、それこそ「Excelマクロを高速化するには?」というようなのと同じ内容だと思います。 よくあるのは、 ・各セル単位での値の設定や読み込みを減らす(配列などを作成して一括で行う) ・画面の更新を行わない(これは今回は関係なし?) というあたりですかね。 | ||||||||
|
投稿日時: 2003-10-17 10:49
Excelに出力するのと同じイメージのDataTableを用意し、ODBC接続で一気に流し込む。KB257819
ただし、DataTableなので、列のデータは固定されます。同じ列に数値と文字列を混在させることはできません。明細行が必要なら、その行はあけておき、後からピンポイントで設定しても、たいした時間はかからないでしょう。 それから、ご存じとは思いますが、エクセルの最大行数は65535(6?)なので、それを超える行は切り捨てられます。 | ||||||||
|
投稿日時: 2003-10-17 11:09
Masaです。
揚げ足取りのようで気が引けるのですが... マクロ(オートメーション含む)で操作可能な行数は 16384行までだったかと... | ||||||||
|
投稿日時: 2003-10-17 11:25
なちゃさん、Jittaさん、 Masaさん返答ありがとうございました。
一括でデータを流し込む方法も考えたのですが 帳票が明細行だけでなく集計行が複数あるものなので集計行を挿入するタイミングを考えると 一括では難しいかなぁと思います。 現在は一時表ならぬ一時EXCELシートを改頁ごとに作成してそれから 本番用シートに値を設定するという感じです。 改頁はシートを分けることで対応しています。 デバック実行で追っていくと一時表に落とす時はそれほど時間はかからないのですが 一時表シートから本番用シートにデータを移動させる時に時間がかかるようです。 ヘッダーやフッターもあるのでそれらはセル名で直接設定して 明細行のものは行を増やしながら値を設定しています。 EXCELを使ってHEADER、DETAIL、FOODERが存在するようなレポートを 一般的な帳票ツールのように扱うこと自体無謀なのですかね・。 | ||||||||
|
投稿日時: 2003-10-17 11:39
どのように扱ったときでしょう?とりあえず、マクロで Public Sub testmac() Dim r As Long Dim c As Range For r = 1 To 65536 Cells(r, 1) = r Next For Each c In Range("COL_B") ' "COL_B"は、B列全て c(1, 1) = "AAA" Next End Sub としてみると、65536行扱えています。 | ||||||||
|
投稿日時: 2003-10-17 12:06
エクセル(に限らず、Office製品)の印刷は、実行される環境に依存するように思われます。他の人が作ったWord形式のドキュメントを表示したところ、改行位置が微妙に狂っている、という経験はないですか?どうも、実行された環境で使用しているプリンタとドライバより、印字可能範囲を取得し、その範囲に合わせて調整しているようなのです。Office製品は文字数を変更して調整しているようなのです。これはマニュアルや広報、技術文書に書いてあることではなく、経験的なことなので、正しいかどうかはわかりません。 他のことを調べていて、こんなの発見 [XL2002] 異なる環境で印刷範囲やセルの幅や高さが変わる場合の対策 http://support.microsoft.com/default.aspx?scid=kb;ja;400271&Product=excelJPN [ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-17 12:16 ] | ||||||||
|
投稿日時: 2003-10-17 16:32
なるほど。 jittaさんのやり方なら出来るわけですね。 一つ大人になりました。 私の作ったものではないのですが、当方の 顧客納入物にて16384行までしか扱えないも のがあり、SheetオブジェクトのCellsプロ パティにて直接行&列を指定して代入して いました。 ソースはかなり汚いため掲載しませんが... |
1|2|3
次のページへ»