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

ASPからエクセルに出力する際の表示形式について

1
投稿者投稿内容
Davids
会議室デビュー日: 2007/11/11
投稿数: 1
投稿日時: 2007-11-11 20:53
いつもこの掲示板を参考にさせて頂いております。

今回ASP(.NETではなくて、単純にASPです)からエクセルに出力をさせたいのですが、
エクセルに出力する際、数字データ(0123)が、123と勝手に変換されてしまい、前0が取れてしまいます。

データをそのまま文字列としてエクセルに出力するような、表示形式を指定する方法はありませんでしょうか。

chr関数等を用いてシングル(’)を付けたりするのですが、実データとしても(’)が付いてしまいますので、あまりしたくはありません。

過去のスレッドで同じような書き込みがあったのですが、
結論はエクセルをHTMLで保存するというものでした。

エクセルで文字列として貼り付けたいのですが、レコードセットにCstr関数を使ってみても、エクセルは前0を取ってしまいます。
エクセルの表示形式制御は難しいのですかね。。。(CSVが無難なのでしょうか)

下記にコードを掲載しますので、どなたかご教授くださいませ。
何卒宜しくお願い致します。

<%@Language="VBScript" %>
<%
dim sConnStr, Conn, Query, RS
response.buffer = true
response.ContentType = "application/vnd.ms-excel"

sConnStr = "Provider=SQLOLEDB;Server=SQL;Database=TEST;UID=TEST;PWD=TEST;"

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open sConnStr

Query = Session("Query")

set RS = Conn.execute(Query)

'抽出する列項目を列挙(19項目)
'chr(34)はダブルクォーテーション
'chr(39)はシングルクォーテーション

'列名

response.Write chr(34) & "列名A" & chr(34) & vbtab _
  & chr(34) & "列名B" & chr(34) & vbtab _
  & chr(34) & "列名C" & chr(34)
    Response.Write vbnewline

'データ

Do While not RS.EOF

'RS(A)はデータ上は文字列(ABCDEFのようなデータ)→文字列として出力したい
'RS(B)はデータ上は文字列(0123のようなデータ)→文字列として出力したい
'RS(A)はデータ上は数値(999のようなデータ)→数値として出力したい

response.Write chr(34) & RS("A") & chr(34) & vbtab _
       & chr(34) & Cstr(RS("B")) & chr(34) & vbtab _
       & chr(34) & RS("C") & chr(34)
    Response.Write vbnewline
  RS.Movenext
loop

RS.close
Set RS = Nothing
Conn.close
Set Conn = Nothing

response.Flush
response.End
%>
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-11-12 10:58
う〜ん、CSVでも無理ですと言うより、タブ区切りのCSV形式で駄目なら、
通常のカンマ区切りのCSVでも無理です。

そのデータをインプットとして用いるのであれば、レコード書き込み時に
Format指定で問題無く書き込めますので、問題ありません。
そのデータをアウトプットとして用いるのであれば、悪い事は言いません
止めときなさいと・・・・直書きでは無理だと思います。
(第一、見出しやら罫線やら左詰やら右詰やらは、直接Excelファイルを操作しないと
 無理です。)

以前、(VB6.0全盛の時期)私が担当していたイントラでは、データ照会画面等から
Excel文書に落とす際は、データを単にCSVに落とすPG・展開する為のテンプレExcel
ファイルの2つを併用していました。
(データ作成はASP側・展開するExcelはActiveXで対応するPGがFTPでダウンロード)
今考えると何か無駄があるかも知れませんが、テンプレのセルの書式は既に決定
しているので、00100というデータもセルの書式が文字列であれば何も問題ありません
し、データにより書式が異なるのであればテンプレにマクロを作成すれば解決します。

ちなみにActiveXのプログラムはVBで組んでました。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2007-11-12 12:41
るぱんです。

やりたいことがクリアでないので伝わってきていないですが、
妄想してみます。

1.サーバーでエクセルを作成したい。
2.ダウンロードしてすぐにユーザーが使えるようにしたい

この辺でしょうか?
要件をもう少しクリアにして下さい。

通常は、CSVで出してエクセルから
データ→外部データの取込→テキストファイルのインポート
で読み込む際に加工というのが筋ですね。



●具体的な回答。
まず、サーバーでExcelをゴリゴリするのが良いのかどうかをおいておいて、

該当ExcelBookを開いて、
該当セルを文字列だけよんってご指名すればよいのでは?
したのコードを先に入れてやればできるような気がするが・・・。

コード:

例えば、Sheet1のA列だけ文字列
Dim objExApp AS Object
Dim objBook As Object
Dim objSheet AS Object

Set objExApp = CreateObject("Excel.Application")
Set objBook = objExApp.WorkBooks.Open("ファイルのパス")
Set objSheet = objBook.Sheets("Sheet1")
objSheet.Activate
Range("A:A").Select
Selection.NumberFormatLocal = "@"
objBook.save
Call objBook.Close
Set objBook = Nothing
Call objExApp.quit()
Set objExApp = Nothing



あ、ちなみに、検証はしてないです。


●その2
テンプレ用意して、そっちには文字列を指定してあげておいて、
コピーしてからはじめるか?


●その3
かなり変則的です。
ユーザー→タスクをプール→定期的にバッチでExcelを作成→メールで配布
システムが散らばるという意味で好ましくないと言われるかもしれません。

独自にExcelを使えるマシンを用意する必要があり、
その時間帯は、そのマシンのCPUに負荷がかかるけど、
セキュリティ的に一番問題が無いでしょう。

JOBの為に貯めておく情報を抜き出して
JOB毎にExcelwo作成し、メールで送信できれば、ほぼ問題は無いでしょう。
まぁ、めんどくさいんですけどね。

[ メッセージ編集済み 編集者: るぱん 編集日時 2007-11-12 12:54 ]
グレハン
常連さん
会議室デビュー日: 2006/02/23
投稿数: 25
投稿日時: 2007-11-12 14:30
表示形式を制御となると、EXCELでマクロを組んだ方がいいかもしれません。
というか、私はそれ以外の対処法を知りません…orz


下記リンク先の「印刷、ダウンロードはExcelで!」辺りが参考になるかと思います。
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu12.html
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-11-12 19:51
引用:

データをそのまま文字列としてエクセルに出力するような、表示形式を指定する方法はありませんでしょうか。


タブ区切りやカンマ区切り形式では無理でしょうけど、
Excel HTML形式またはExcel XML形式であれば指定できます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=26391&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37862&forum=7

罫線やら左詰やら右詰やらフォントやら色やらも、たぶん可能でしょう。
1

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