位置情報で子どもの居場所をお知らせ

CSV形式の元ファイルがあるのですが、エクセル形式に変換するプログラムを作成したいと思っています。VBスクリプトやASPでできればと思っているのですが、どういった方法で可能でしょうか?

カンマを取れば、エクセル形式になるという訳にはいきませんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>カンマを取れば、エクセル形式になるという訳にはいきませんでしょうか?



そんな単純な仕組みではありません
VBを扱える力はおありのようですから、Excel形式ファイルをバイナリエディタで開いて確認してください

一番簡単なのは、CSV形式のファイルをExcelで開いて、Excel形式で保存することです

この回答への補足

VBstudioはあるのですが、バイナリエディタが見つからず確認できませんでした。。

例えば、エクセルのシートにCSVを流し込むというような方法も思い浮かんだのですが、これならVBスクリプトでもいけるような気がしてきました。

補足日時:2006/10/27 11:38
    • good
    • 0

CSV形式


カンマで区切りを指定
リターンで行を移動
で指定すればいいんじゃないの
なにもしなくてもエクセルに入る
のでなにも問題ないですよ

この回答への補足

体裁として、xls形式にしたいのです。タブ切りであれば、拡張子をxlsに変更するだけでいいようでした。

補足日時:2006/10/27 12:04
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCSVファイルをEXCELに変換の自動化作業

CSVファイルをEXCELに変換の自動化作業
{CSVファイルをEXCELに変換するため、
excel  ツールバーよりデータ(D)→外部データの取り込み(D)→テキストファイルのインポート→ファイルの種類変更→全てのファイル→○○.csvのファイル指定→“,”の区切り選択、、ウィザードに従って変更し次へで進む→A1が指定されるのでそのまま完了→CSVがEXCELファイルに変換された。
参照したabc1.csvの名前に対して新しいabc1.xlsとなずけて登録する。これらの作業をMYドキュメントのhenkan ホルダーに入っているCSVファイルに同様に作業して同じくhenkan ホルダーに入れる。}
上記の{ }内の作業を何か,excelのVBAのマクロのようなもので実行することはできませんか。
やり方を教えてください。

Aベストアンサー

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませんので、後々のためにコードを掲示しておきます。以下は、私が考えていたコードであって、その処理後の状態を保証するものではありません。

'<標準モジュール推奨>
Sub DirectryCSV2XLS()
  Dim myCSVFnames() As String
  Dim myCSVFname As String
  Dim xlFileName As String
  Dim i As Long
  Dim j As Long
  Dim n As Variant
  Dim msg As String
'=====================================
  '以下 フォルダー要設定
  Const MY_FOLDER As String = ""C:\Documents and Settings\<User>\My Documents\"
'=====================================
  If Left$(MY_FOLDER, 1) <> "\" Then MsgBox "フォルダーの設定の最後は、「\」が必要です。": Exit Sub
  If Dir(MY_FOLDER, vbDirectory) = "" Then _
   MsgBox "そのフォルダーは存在しません。", vbCritical: Exit Sub
 
  myCSVFname = Dir(MY_FOLDER & "*.csv")
  Do While myCSVFname <> ""
   ReDim Preserve myCSVFnames(i)
   myCSVFnames(i) = myCSVFname
   i = i + 1
   myCSVFname = Dir()
  Loop
  If i = 0 Then MsgBox MY_FOLDER & " には、CSVファイルが存在しません。", vbCritical: Exit Sub
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  For Each n In myCSVFnames
   xlFileName = Mid$(n, 1, InStrRev(n, ".csv")) & ".xls"
   If Dir(MY_FOLDER & "\" & xlFileName) = "" Then
     With Workbooks.Open(MY_FOLDER & "\" & n, Format:=2)
      .SaveAs MY_FOLDER & xlFileName
      Workbooks(xlFileName).Close False
      j = j + 1
     End With
   End If
  Next n
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  If i <> j Then msg = "既に" & CStr(i - j) & "個のCSV ファイルは、XLSに変換されています。"
  MsgBox i & "個のCSVの内、" & j & "個のファイルをXLSに変換しました。" & vbCrLf & msg
End Sub

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませ...続きを読む

Qアプリケーション終了時例外エラー(アクセス違反)の調査方法について

大変困っています。

アプリケーションが終了するときに「アクセス違反」がワトソン博士によって取得されています。
当方アプリケーションなどに弱く、解決策の想像が付きません。どなたかご教授お願いいたします。

<解決策例>
・どういったスキルを持った人にどの様な調査を進めさせれば良いのか。。。
・以前同様な事があり原因は○○だった
・恐らく○○だろう
 など、お願いいたします。

<ユーザ報告>
処理終了し、画面が消えたところでワトソン博士のメッセージが表示された

<ログ抜粋>
例外番号c0000005(アクセス違反)

ファンクション:RtlDestroyHeap
~略~
フォールト → 77f6d672 8908 mov [eax],ecx ds:09000001=00000000

<備考>
開発環境:MSVC6.0
動作環境:Windows NT4.0 SP6a
発生頻度:2回/年
使用頻度:2~3回/(平日)

以上、よろしくお願いします。

Aベストアンサー

発生頻度が年2回というのはなかなか厳しい条件ですね。

さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB自体は特定のアプリケーションについて書かれていますが、記述されている現象と原因の関係から考えるに、他のアプリケーションでも同様の現象が発生すると思われます。

さてさて。

せっかく書いた文章を捨てるのがもったいないので(貧乏性)、邪魔かもしれませんが下に続けることにします。もし上のKBの内容がそれらしいようであれば、読み飛ばしてください。

========

私であれば、次の手順で調査を行います。

1. MAPファイル、CODファイル作成

「ワトソン博士のログを取得した際に実行していたEXEファイル」をビルドした際、一緒にMAPファイルやCODファイル(リスティングファイル)を作成していれば、そのファイルを用意しておきます。

もし作成していない場合は、「ワトソン博士のログを取得したEXEファイル」と、バイナリレベルで全く同じEXEファイル(バイト単位で比較すると、ファイルに埋め込まれたタイムスタンプ・チェックサム以外は一致する)が作成可能かどうか調べます。(ビルドに必要なソースファイルやビルドオプションに変更を加えていなければ作成可能です。)

作成可能であれば、コンパイルオプションに「リスティングファイルタイプ:マシン語コードとソースを含む」、リンクオプションに「MAPファイル作成」を追加してEXEを再作成してください。これで、「ワトソン博士のログを取得した際に実行していたEXEファイル」に対応するMAPファイルとCODファイルが得られます。

2. エラー発生行を特定

ワトソン博士のログがどれだけ取れているかにもよりますが、スタックダンプが含まれていればたいていエラー発生行を特定できます。

まず「フォールト->」が含まれる逆アセンブルリストを探します。次に、その下にある「スタックバックトレース」を探します。

スタックバックトレースを上から下に順にたどっていくと、そのうち「ReturnAd」(リターンアドレス)がアプリケーションのアドレス範囲(VC++6の標準オプション設定を変更していなければ0x00400000~)に入るところが出てきます。見つかったら、そのアドレスの直前にあるcall命令が例外を発生させたAPIを直接呼び出している場所です。

さて、仮にリターンアドレスが0x00401234だったとします。そうしたら、次はMAPファイルを見てこのアドレスがどの関数に属しているか探します。ちょうど0x00401234というアドレスは見つからないでしょうけれども、これに近いアドレスは見つかるはずです。そのアドレスに対応する関数名もMAPファイルにあります。

次はその関数名をCODファイルから探します。見つかったら、MAPファイルにあるアドレスがCODファイルにあるマシン語コードの先頭アドレスになるので、そこからリターンアドレス0x00401234に対応するはずの場所まで順番にアドレスを辿っていきます。関数の先頭アドレスが0x00401200であれば、0x34バイト先を探すわけです。

そうすると、その探した場所にある命令の直前の命令がcall命令になっているはずです。CODファイルには、その場所のC++ソースでの行番号とソース文もコメントとして入っているはずなので、あとは対応するソースをよーく見てエラーの見当をつけてください。

アセンブラの知識があれば、そこでcallを使った(他の関数を呼び出した)ときの引数の内容もある程度分かります。(ポインタ渡しだと、そのポインタの先の内容までは分かりませんが。)

3. 置き換え用EXEファイルと対応するMAPファイル作成

これ以降は将来への備えです。

コンパイルオプションでデバッグ情報を「プログラムデータベースを使用」、リスティングファイルタイプを「マシン語コードとソースを含む」、リンクオプションで「MAPファイルを作成する」、デバッグ情報「他の種類」を追加してビルドし、出来たEXEファイルを本番用として使用します。同時に作成されるMAPファイル、CODファイル、PDBファイルは保管しておきます。

MAPファイル、CODファイルの使い方は上記2.のとおりです。PDBファイルは、もし完全なクラッシュダンプが取得できればWinDbgを使って事後ソースレベルデバッグが可能になりデバッグ作業が非常に楽になるので、念のため取っておきます。

4. ワトソン博士のオプション変更

drwtsn32.exeを起動し、「クラッシュダンプファイルの作成」をチェックします。(デフォルトは、チェックが入っています。)

クラッシュダンプファイルとEXEとPDBがあればWinDbgで事後ソースレベルデバッグができます。(いわゆるポストモーテムデバッグです。UNIX系でコアダンプしたコアをデバッガで読み込んでデバッグするのと同じ種類のものです。)


普段何とも思わずに行っていることでも、文章にすると長いですね・・・

えーと、「どういうスキルを持った人に調査させればいいか」については、上記の内容を読んで『なるほど!』と言える人でしょうか。

参考URL:http://support.microsoft.com/kb/168006/ja

発生頻度が年2回というのはなかなか厳しい条件ですね。

さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB...続きを読む

Q大量のCSVファイルをExcel形式に変換する

お世話になります。
大量のCSV(.csvファイルをExcel(.xls)ファイルに変換したい
と考えております。
リネームソフトを使って、(.csv)⇒(.xls)の一括変換を
したところ、拡張子は確かに.xlsに変換されたのですが、
中身はCSVのままとなっておりました。
(↑ファイル名とシート名が同期を取っているので)

このCSVを確実にエクセル形式へと変換したいのですが、
どなた様かいいお考えをお持ちでしたら教えてください。
ググってみたところ、そういったアドインがあるのですが、
できれば費用をかけずに行いたいです…。

Aベストアンサー

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの作ったアドインは、押しなべて、あまり出来の良いものが少ないように思います。ですから、なるべく、一般のマクロで解決するように望みます。


'---------------------------------------------------

'<標準モジュール>
Sub CSV2XLS()
  'CSV を XLS に変換するマクロ
  Dim myArray() As String
  Dim FileName As Variant
  Dim fn As Variant
  Dim xlFileName As String
  Dim xlFileBaseName As String
  Dim TextLine As String
  Dim FileNo As Integer
  Dim i As Long
  Dim k As Long
  '基本となるフォルダ
  'BASE_DIR=""なら、マクロのあるブックと同じ場所のフォルダ
  Const BASE_DIR As String = ""
  If BASE_DIR <> "" Then
   ChDir BASE_DIR
   Else
   ChDir ThisWorkbook.Path
  End If
  FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv", MultiSelect:=True)
  If VarType(FileName) = vbBoolean Then
   Exit Sub
  End If
  Application.ScreenUpdating = False
  For Each fn In FileName
   On Error GoTo NextStatus
   With Workbooks.Open(fn)
     xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & ".xls"
     Do
      k = k + 1 '同名の時枝番をつける
      If k > 3 Then Exit Do
      If Dir(xlFileName) = "" Then
        .SaveAs xlFileName
        xlFileBaseName = Mid$(xlFileName, InStrRev(xlFileName, "\") + 1)
        Workbooks(xlFileBaseName).Close False
        k = 0
        Exit Do
        Else
        xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & "_" & CStr(k) & ".xls"
      End If
     Loop
   End With
NextStatus:
  Next fn
  Application.ScreenUpdating = True
  MsgBox "終了しました。",64
End Sub

'---------------------------------------------------

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの...続きを読む

QVisualBasic6.0でCSVをExcelに変換して保存する

こんにちは

どなたか教えていただけると光栄です。
CSVをエクセルに変換するにはどうしたらよいでしょうか??
今、現在マクロを使って変換しているのですが非常に遅いです。
流れとしては
エクセル起動

マクロ

エクセル終了
です。これをマクロを呼び出さずに変換したいのですが…どうしたらよいでしょうか??

Aベストアンサー

BOX_Fileさんのしたいことと違ったらすいません。
単純にCSVのファイルをエクセル形式で書き出し保存すると受け取ったのですが。。。

ここのHPにVBからエクセルを操作するサンプルが充実してました。
VBレスキュー(花ちゃん)&八日市PCサービス
http://www.bcap.co.jp/hanafusa/VBHLP/excelmenu.htm

作業の流れとしては
・CSVファイルを開いて内容を読み込む。
 (ここで読み込んだデータの変換等もできます。)
・読み込んだデータをエクセルファイルに書き出す。
・エクセルファイルを新規作成して保存する。
でいいのだと思います。

また、VBからエクセルを操作するサンプルにはマクロを
動かす方法もありましたのでご参考にしてください。

しかし、環境が違いますので一概には言えませんが、
連続して処理をするとなるとマクロを使った場合と
大差ないかもしれません。
この方法は逐一、エクセルを起動し作業を行うからです。

参考URL:http://www.bcap.co.jp/hanafusa/

BOX_Fileさんのしたいことと違ったらすいません。
単純にCSVのファイルをエクセル形式で書き出し保存すると受け取ったのですが。。。

ここのHPにVBからエクセルを操作するサンプルが充実してました。
VBレスキュー(花ちゃん)&八日市PCサービス
http://www.bcap.co.jp/hanafusa/VBHLP/excelmenu.htm

作業の流れとしては
・CSVファイルを開いて内容を読み込む。
 (ここで読み込んだデータの変換等もできます。)
・読み込んだデータをエクセルファイルに書き出す。
・エクセルファイルを新規作成...続きを読む

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?

Q「参考まで」という言い回しについて

「参考まで」「参考までに」といった言い回しを職場のメール等でよく目にするのですが、自分にはどうも違和感があり、使わないようにしています。そもそもこれは正しい日本語なのでしょうか?

Aベストアンサー

はじめまして。

<そもそもこれは正しい日本語なのでしょうか?>

正しくないとは言えないと思います。

「までに」は「まで」+「に」の複合助詞で、
「まで」:程度がそれ以上及ばないことを示す副助詞
「に」:時を示す格助詞
という働きをしています。

このような、格助詞や接続助詞で文が終わる表現は、古語の時代から存在します。
例:
「にて」「とも」「ども」「ば」など

ご質問文は述部が省略された口語表現です。本来は
「ご参考までに(目を通して下さい)」
といった、動詞句が省略されています。

口語(話言葉)では、リズムやテンポ、語呂を整えるために、わかりきった動詞、長い述部を省略して明確に要件が伝わるようにすることがあります。

例:
「また明日(会いましょう)」
「それではまた(お会いしましょう)」
「お陰様で(元気です)」

また文語(書き言葉)でも、こうした省略が起こることはあります。
例:
「友情のしるしに」
「感謝の気持ちを込めて」
「に」「て」はそれぞれ格助詞・接続助詞ですが、この場合は、テンポというよりは、「粋」な締めくくりを意図しての省略用法になると思います。

以上のように、こうした省略用法は、素早く要件を伝えるため、粋な表現のために工夫された、言葉の便宜上の用途ですから、正しくないとは言えません。「便利な語法」として、TPOや必要に応じて使い分ければいいと思います。

特に敬意を払う相手に対しては、口語での省略表現は失礼にあたることがあるので、語尾まで敬語で修辞した方がいいでしょう。
例:
「ご参考までにお目通し下さい」
「ご参考までにご拝読下さい」

ちなみに、私もこのサイトでの回答の末尾に「ご参考までに」「ご参考になれば」といった助詞止め表現をよく使います。この省略には、一種の謙譲(献上?)の気持ちを込めて使っております。この省略の背後には、「お役に立てるかわかりませんが、ご参考程度にしていただければ幸いです」という謙譲の意味が込められています。ただこのような長い文章をだらだら書いて、余計な装飾文にするのを避けた、一種の配慮と思っております。

以上ご参考までに。(笑)

はじめまして。

<そもそもこれは正しい日本語なのでしょうか?>

正しくないとは言えないと思います。

「までに」は「まで」+「に」の複合助詞で、
「まで」:程度がそれ以上及ばないことを示す副助詞
「に」:時を示す格助詞
という働きをしています。

このような、格助詞や接続助詞で文が終わる表現は、古語の時代から存在します。
例:
「にて」「とも」「ども」「ば」など

ご質問文は述部が省略された口語表現です。本来は
「ご参考までに(目を通して下さい)」
といった、動詞句が...続きを読む

QエクセルVBA 「On Error GoTo 0」について

「On Error GoTo 」ステートメントの意味は、だいたい理解しています。
「On Error GoTo 0」 ステートメントについて、ご教授お願いします。
参考書には「エラーのトラップ処理を無効にする」と載っていましたが、よくわかりません。
具体的にどのような使い方をするのか、簡単なコードで説明していただければ幸いです。
よろしくお願いします。

Aベストアンサー

#3の回答者ですが、コードのどこが原因か特定し、実行時エラーとして、そのエラーが不可避な場合において、On Error Resume Next を付けますから、On Error Goto ErrHandler よりも、扱い方が難しいです。当然、その部分だけの範囲を囲うので、On Error Goto 0 を入れると思いますし、今では、使う場面が限定されているはずです。

後はテキストを参考にしてください。当面、このようなコードが必要になることはないと思いますが。

Q【緊急】ASPでのExcel出力方法について

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力されたExcelを開くたびにバージョン不一致の警告(ファイル形式と拡張子が一致しません)が表示されて不便です。

よって、Excel出力をExcelオブジェクトを用いた方法に変更しようと考えております。
====================================
'ファイルシステムオブジェクト生成
Set oFs = Server.CreateObject("Scripting.FileSystemObject")

'テンポラリファイル名取得
sFileName = Split(oFs.GetTempName, ".")

'エクセルファイル名にする
sXlsName = sFileName(0) & ".xls"

'テンプレートが保存されているフォルダの物理パスを取得
sPath = oFs.GetFolder(Server.MapPath("/hogehoge/")).ParentFolder

'エクセルのオブジェクトを生成
Set oXls = Server.CreateObject("Excel.Application")

'エクセルのテンプレートファイルを開く
Set oTmp = oXls.Workbooks.Open(sPath & "\temlate\template.xls")
 ~
====================================



ここからが質問です。

Excelオブジェクト作成時、エラーになってオブジェクトの作成が失敗します。
====================================
【オブジェクト作成を「Server.CreateObject」で行った場合】
Set oXls = Server.CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Server オブジェクト エラー 'ASP 0177 : 80080005'
  Server.CreateObject に失敗しました

【オブジェクト作成を「CreateObject」で行った場合】
Set oXls = CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Microsoft VBScript 実行時エラー エラー '800a01ad'
  ActiveX コンポーネントはオブジェクトを作成できません。: 'Excel.Application'
====================================

いろいろなサイトを情報をもとに対応しましたが、解決の糸口が見えない状況です。
====================================
【今まで試みた対応】
(1)コンポーネントサービスの「DCOMの構成」にて、「Microsoft Excel Application」の「起動とアクティブ化のアクセス許可」に「EveryOne」を追加。
(2)以下のフォルダを用意してフォルダのアクセス許可に「EveryOne」を追加。
 C:\Windows\System32\config\systemprofile\Desktop
 C:\Windows\SysWOW64\config\systemprofile\Desktop
(3)オブジェクト作成時、「Excel.Application」を「Excel.Application.15」に変更。
====================================

なお、開発環境は以下となります。
====================================
【開発環境】
OS:windows 8.1 64bit
IIS:8.5
Excel:2013
その他:(1)aspを使用(.netではありません)
    (2)「windows 8.1」はあくまでテスト環境です。
     正常に動作することを確認後、本番環境「Win2008Server R2」に組み込む予定です。
====================================

私事ではありますが、スケジュール的に押し迫っております。

お忙しいところ申し訳ありませんが、解決方法のご教授をお願いいたします。

以上です。

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力され...続きを読む

Aベストアンサー

残念ながら、何重もの理由で、そのソリューションは成立しません。

・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーASPが正常に動作する保証はありません。そもそも、32bitの2003サーバでさえ、ASPを動作させるためには多数の依存ライブラリをインストールする必要がありました。
FileSystemObjectやDictionaruObjectは間違いなく落ちます。
・Windows8.1/64bitと、Windows 2008R2サーバでは、IISのバージョンや動作スキームが完全に異なっており、32ビット依存コンポーネントのインストール状況が違います。
また、上記のセキュリティ設定も、サーバOSは根本的に異なります。

自分ならさっさと諦めて、その部分だけASPX仕様に変更し、Excel生成用のWebライセンスつき市販ライブラリを購入してカタをつけます。

Excel Creator
http://www.adv.co.jp/product/product_excelcreator2012.htm

Webサーバ上で正しいExcelデータを生成するということは、非常にコストのかかるタスクなのですよ。

それが予算の関係で不可能なら、CSVで我慢してもらうか、Office XLSXを解読して生成するか、HTMLかWell FormedなXMLを生成し、レスポンスヘッダを詐称して強引にエクセルに認識させる(要するに現在ご提示のNGな方法)かすることです。

回答になってなくて申し訳ありませんが、「やっても無駄」というお答えしかできません。
あしからず。

残念ながら、何重もの理由で、そのソリューションは成立しません。

・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーAS...続きを読む


人気Q&Aランキング