- PR -

配列のデータをEXCELにペーストする

投稿者投稿内容
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2003-12-16 17:26
いつも参考にさせていただいてます。
現在、ASP.NETで開発を行っていて疑問に思ったことがあり、投稿しました。
ASP.NETで配列に入れたデータをEXCELファイルに一括で貼り付けると
ちゃんとセルに値が入ってくれないのです。。うーん説明が悪いですね・・。
例えば数値データの配列をEXCELに貼り付け、そのファイルを保存し
保存したEXCELファイルを立ち上げてみると全て左によっているのです。
貼り付け領域部分(データを入れた部分)のセルをひとつずつクリックしていくと
ちゃんとデータが右寄りになってくれるのですが・・。
どうやら配列でペーストしたデータをちゃんとセルに入ってないようなのです。
まえに他の記事で調べた時、一つ一つセルをクリックして一度編集状態にしてあげなければ
無理と書いてあったと思うのですが
過去のスレッドを見る限り、データを配列に入れて出力している方も
いらっしゃるようですが現象が起きたことは無いでしょうか?
もし、いらした場合、回避策があればご教授願います。
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2003-12-17 10:57
ななさんこんにちは。

見た目だけの話なら、excelの場合、数値は右よりで、文字列は左よりに
なるので、たとえば、「111」ではなく、「'111」とシングルクォーテーションを
数値の前につけると左よりになります。

それとも一番左の列に全部のデータが入っているということでしょうか?
haruca
会議室デビュー日: 2003/10/20
投稿数: 8
投稿日時: 2003-12-17 13:57
ななさんと同じような現象が起きていたため、ネットで原因をさがしていたらこの投稿を見つけたので書きこませて頂きました。場違いであったら、申し訳ありません。
現在、ASPから配列データ(数値)をExcelへ書き込んでいますが、実際に書き込んだExcelを開いてデータを見ると全てデータの前に '(シングルクオーテーション)がついています。Excelへ書き込むにあたって何か特別な処理が必要なのでしょうか?
どなたか、ご存知であればご教授願います。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-17 14:21
お疲れ様です。
るぱんです。

エクセルの仕様なのですが・・・。
・文字列は左寄せ
・数値は右寄せ

というルールが確立しています。
コード:

j = 入れたい列
For j = 0 to UBound(配列変数)
Cells(j + 1,i).Value = 配列変数(j)
Next j


と言う感じなのでしょうが、

僕が知る限り、方法論として二つあります。
ヒントだけ書きます。

1.数字だろうがなんだろうが左寄せにする方法。
2.エクセルに数字と認識させるのではなく、文字列として認識させる方法。
です。

"エクセル付属のVBAのヘルプで「NumberFormatLocal」"
を見るなりしてみて下さい。


[ メッセージ編集済み 編集者: るぱん 編集日時 2003-12-17 14:24 ]
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-17 14:27
お疲れ様です。るぱんです。
引用:

harucaさんの書き込み (2003-12-17 13:57) より:
ななさんと同じような現象が起きていたため、ネットで原因をさがしていたらこの投稿を見つけたので書きこませて頂きました。場違いであったら、申し訳ありません。
現在、ASPから配列データ(数値)をExcelへ書き込んでいますが、実際に書き込んだExcelを開いてデータを見ると全てデータの前に '(シングルクオーテーション)がついています。Excelへ書き込むにあたって何か特別な処理が必要なのでしょうか?
どなたか、ご存知であればご教授願います。



ASPの内部は変数の「型」があいまいになっていると思います。
Variantだったかな?

ASPが「数字」を「文字列」として認識していませんか?
キャストしても駄目ですかね?
haruca
会議室デビュー日: 2003/10/20
投稿数: 8
投稿日時: 2003-12-17 15:04
アドバイスありがとうございます。
Excelに書き込む前に、二つの配列のデータの型を表示してみると、Date型とLong型と認識しています。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-17 16:17
お疲れ様です。
るぱんです。

手元にASPの環境がないので、確認できてないのです。
中途半端で申し訳ないです。

現状が
1.どういう処理をしていて
2.どこで何をチェックして
3.どういう判断基準で駄目だったのか
4.Excelの種類や、OS等のシステム環境
がわからないので答えに窮したりしますが、
一応ご参考のために。

1.Clngなどのキャストさせる関数を用いて見ましたか?
書き込む前と言うのがわかっていないのですが、
Long型の場合、IsNumeric関数辺りがあれば・・・ですが、チェックできると思います。
responce.writeで表示して見て下さい。

2.仕方が無いとあきらめた場合。
エクセル側に内部処理を任せてしまうと言うやり方もあります。
つまり、エクセルにマクロで関数を組み込んでおいて、ASPから叩きにいく事ができます。
 1)テンプレートファイルにマクロを乗せる。
 2)新しいブックの追加
 3)ActiveSheetに対して処理を続行。
という手順が余計に発生します。

3.もっとめんどくさいやり方
ASPとエクセルの間にバッチファイルをかませて、エクセルテンプレートを呼び出し、
AutoExec()関数によって自動処理させる方法もあります。
引数をファイルで渡すような形になると思うので現実的ではないでしょう。

haruca
会議室デビュー日: 2003/10/20
投稿数: 8
投稿日時: 2003-12-17 16:47
現在の処理・状況を記述します。
@DBからデータを取得し、ASPの配列に入れる(dHIZUKE(n)、(NODO(n))

Aデータベース(xls)を開き、下記のようにデータを書き込む

For n = 1 To 21
rs.Fields(0).Value = dHIZUKE(n)
Response.Write dHIZUKE(n) & "<BR>"
Response.Write("TypeName=" & TypeName(dHIZUKE(n)))
rs.Fields(1).Value = NODO(n)
Response.Write "<BR>" & NODO(n) & "<BR>"
Response.Write("TypeName=" & TypeName(NODO(n)))
rs.Update '更新
Response.Write "<BR>"
rs.MoveNext '次のレコードへ(次の行へ)
Next

BResponse.Write部分は以下のように表示される
 2003/12/01
 TypeName=Date
 78
 TypeName=Long

CExcelファイルを見ると以下のようになる
 '2003/12/01
 '78 
※OS Windows2000
※Excel Excel2000

頂いたアドバイスをもとにもう少しやってみます。
ご丁寧にありがとうございました。

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