@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

C# Excelファイル作成時にOutOfMemoryException発生

投稿者投稿内容
じゅーにー
会議室デビュー日: 2007/05/23
投稿数: 10
投稿日時: 2007-05-23 16:23
開発環境: VS2003, OFFICE2003
言語: C#
OS: WIndows XP Pro SP2

いつもお世話になっております。

下記ソースの末尾にある"sheet.Cells[1, 2] = data;"の部分で、
OutOfMemoryExceptionが発生しますが、原因が特定できません。
どなたか分かる方いらっしゃいますか。

********************ここから********************
Excel.Application app = new Excel.Application();;
app.Visible = true;

Excel.Workbook workbook =
app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
workbook.Activate();
Excel.Sheets sheets = workbook.Sheets;

Object after = sheets[sheets.Count];
Object before = System.Reflection.Missing.Value;
Excel.Worksheet sheet = (Excel.Worksheet)sheets[sheets.Count];

string data =
@"--------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
-------------------------------------------------------------------";
// 本当は一行です。

sheet.Cells[1, 2] = data;
********************ここまで********************

調査の結果、以下のことまで分かっています。
1. -(ハイフン)が1025文字以上だと発生する。
2. -(ハイフン)が1024文字以下の場合や、
-(ハイフン)ではなく"a"や"あ"が1025文字以上の場合には発生しない。
3. アプリケーションから、セルに入力できる最大文字数は2046文字である。
4. 例外は、mscorlib.dllで発生している。
5. -(ハイフン)が、-(マイナス)と認識されているわけではない。
(セルの書式設定で表示形式を文字列にしたが、変化なし)

以上、宜しくお願い致します。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-05-24 10:55
1025文字でエラーなので数式として中途半端な自動認識?がされてるようですねぇ。
結果は文字列でも途中でナニかやってるのかも。

@"----〜

@"'-----
とかにしてもダメですかね?
じゅーにー
会議室デビュー日: 2007/05/23
投稿数: 10
投稿日時: 2007-05-24 12:10
返信ありがとうございます。

@"----〜

@"'-----
とすればOutOfMemoryExceptionは発生しません。

現在は、上記の方法で本現象を回避しようと調整中です。

ですが、上記方法だとエクセルの該当セルをクリックした時に、
先頭に'(クォーテーション)が見えてしまうことが気になります。

見えなくする方法があれば良いんですが、ご存知ないですか?



未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-05-24 13:44
>セルの書式設定で表示形式を文字列にしたが、変化なし
これはプログラムからNumberFormatプロパティで設定したのですか?
それともExcelのシートに設定しておいたのですか?

プログラムから設定してダメなら∩(・ω・)∩<オテアゲーです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-24 14:17
セルの書式は関係ありません。
この場合 (先頭にハイフンがある限り) 式の評価が行われます。
式が評価されるので 1,024 という制限が付きまとうハズです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゅーにー
会議室デビュー日: 2007/05/23
投稿数: 10
投稿日時: 2007-05-24 14:23
プログラムからNumberFormatで設定しました。

最初のソースの" sheet.Cells[1, 2] = data;"の部分を
下記のようにしましたが、結果は変わりませんでした。
---------------------------------------------------
sheet.get_Range("B2", "B2").NumberFormat = "@";
sheet.get_Range("B2", "B2").Value2 = data;
---------------------------------------------------

この事象が.Net Framework1.1のバグであるならば、
今回は'クォーテーションで暫定的に回避する
ものしかないかなとも考えています。

しかし、Microsoftのサポートオンラインでも調べたものの
該当する事象を確認することはできませんでした。

バグなのかどうかや、原因が何かくらいのことは説明できるように
なりたいのですが。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-24 14:30
引用:

じゅーにーさんの書き込み (2007-05-24 14:23) より:

この事象が.Net Framework1.1のバグであるならば、


.NET Framework というより、Excel の制限によるものです。

OutOfMemoryException というのはちょっと違ってるとは思いますが。
(COMException / HRESULT からの例外ではないのですね)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゅーにー
会議室デビュー日: 2007/05/23
投稿数: 10
投稿日時: 2007-05-24 14:31
お返事ありがとうございます。

引用:

セルの書式は関係ありません。
この場合 (先頭にハイフンがある限り) 式の評価が行われます。
式が評価されるので 1,024 という制限が付きまとうハズです。




ということは、本現象は.net側の仕様であり、
1025文字以上のハイフンを扱いたい場合は、先頭文字はハイフン以外で
始めなければいけないという解釈で良いでしょうか。

スキルアップ/キャリアアップ(JOB@IT)