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

Excelと連携したWebサービス構築

投稿者投稿内容
会議室デビュー日: 2005/11/16
投稿数: 10
投稿日時: 2005-11-16 13:45
初めまして。虎と申します。
プログラミング全くの初心者で右も左も分かりません。
今Excelと連携したWebサービスを構築しているのですが、
エラーになってしまい前に進めません。
環境とソースを書き込みますのでどなたかお力をかしていただけたら嬉しいです。

環境:Windows XP Pro
    Office2003
    IIS 5.1
    Visual Studio .NETインストール済
    Office Web Services Toolkit 2.0インストール済


です。開発にはASP.NETで言語はVB.NETを使っています。
asmxファイルのソースは

Imports System.Web.Services

<WebService(Namespace:="http://tempuri.org/")> _
Public Class excel
Inherits System.Web.Services.WebService

" Web サービス デザイナで生成されたコード "

<WebMethod()> Public Function open()
Const filename As String = "サーバ(localhostをサーバとしています)の
                   CSVファイルのフルパス
"
Dim xlsApp As Object
Dim xlsBook As Object
Dim xlsSheet As Object
Dim recBuff As String
Dim fileNo As Integer
Dim col As Integer
Dim row As Integer

' Excelへの参照
xlsApp = CreateObject("Excel.Application")
' Excelにブックを追加
xlsBook = xlsApp.Workbooks.Add
' SheetコレクションからSheet1を取得
xlsSheet = xlsBook.Sheets("Sheet1")
' 空いているファイル番号を取得
fileNo = FreeFile()
' CSVファイルを開く
FileOpen(fileNo, filename, OpenMode.Input)
' ファイルの最後に達するまでループ
Do Until EOF(fileNo)
' 読み込んだ行数をカウント
row = row + 1
' 1行分のデータを読み込む
For col = 1 To 5
' ファイルから読み込んだ内容を変数に保存
Input(fileNo, recBuff)
' 変数の内容をExcelに送る
xlsSheet.Cells(row, col) = recBuff
Next
Loop
' CSVファイルを閉じる
FileClose(fileNo)
' Excelを表示
xlsBook.Application.Visible = True
End Function

End Class

です。これをコンパイル実行しopenを起動すると

HTTP 500 - 内部サーバー エラー

となってしまい先に進めません。
本当に無知ですいません。どなたか教えていただけるとうれしいです。

kernel
常連さん
会議室デビュー日: 2005/10/05
投稿数: 22
投稿日時: 2005-11-16 16:27
とりあえず、何行目でどんなエラーメッセージが出たか書いていただかないと、
誰も答えようがないと思いますよ。

想像ですがCreateObject("Excel.Application")で、
「ActiveX コンポーネントを作成できません」という例外が発生してしまいませんか?
それであれば、下の過去ログが参考になります。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18583&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12667&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8662&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6114&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4727&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3498&forum=7
会議室デビュー日: 2005/11/16
投稿数: 10
投稿日時: 2005-11-16 18:26
kernelさんありがとうございます。
そーですよね。自分が同じ質問されても答えられないです・・・
すいません。
Visual Studio .netでDebugでビルドするとエラーは出ないんです。
そして、ExcelのVisual Basic EditorのWeb ReferenceでそのWebサービスを追加して
Webサービスのメソッドを呼び出すマクロを作成し、
実行するとまさにkernelさんがおっしゃる通り、
「ActiveX コンポーネントを作成できません」
というエラーがでます。
想像で分かるなんて本当にすごい!!!
ありがとうございます。
過去ログを参考にし、試してみます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-11-16 19:37
 kernelさんのリンクでおおよそ解決すると思いますが、もうひとつ「ライセンスの問題」もありますので、ご注意を。また、「推奨されていない使い方」であることも、要注意です。
___________________________________________________________________
□ written by Jitta on 2005/11/16
□ Microsoft MVP for Visual Developer ASP/ASP.NET Oct.2005-Sept.2006
_________________
会議室デビュー日: 2005/11/16
投稿数: 10
投稿日時: 2005-11-16 19:45
過去ログを参考に
Visual Stdio.NETにてasmx.vb作成時に
「プロジェクト」→「参照の追加」
→「COM」タブ→「Microsoft Excel 11.0 Object Library」を選択→「OK」
をしてビルドしてみたところ
サーバエラーが発生し、
コンパイラ エラー メッセージ: BC30560: 'Global' は、名前空間 'Excel' では不適切です。
となってしまいました。
エラーが発生したソースは下記の通りです。

行 1: '------------------------------------------------------------------------------
行 2: ' <autogenerated>
行 3: ' This code was generated by a tool.
行 4: ' Runtime Version: 1.0.3705.6018
行 5: '
行 6: ' Changes to this file may cause incorrect behavior and will be lost if
行 7: ' the code is regenerated.
行 8: ' </autogenerated>
行 9: '------------------------------------------------------------------------------
行 10:
行 11: Option Strict Off
行 12: Option Explicit On
行 13:
行 14: Imports Microsoft.VisualBasic
行 15: Imports System
行 16: Imports System.Collections
行 17: Imports System.Collections.Specialized
行 18: Imports System.Configuration
行 19: Imports System.Text
行 20: Imports System.Text.RegularExpressions
行 21: Imports System.Web
行 22: Imports System.Web.Caching
行 23: Imports System.Web.Security
行 24: Imports System.Web.SessionState
行 25: Imports System.Web.UI
行 26: Imports System.Web.UI.HtmlControls
行 27: Imports System.Web.UI.WebControls
行 28:
行 29: Namespace ASP
行 30:
行 31: <System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()> _
行 32: Public Class Global_asax
行 33: Inherits excel.Global
行 34:
行 35: Private Shared __intialized As Boolean = false
行 36:
行 37: Public Sub New()
行 38: MyBase.New
行 39: If (ASP.Global_asax.__intialized = false) Then
行 40: ASP.Global_asax.__intialized = true
行 41: End If
行 42: End Sub
行 43: End Class
行 44: End Namespace
行 45:

行 33の太字の部分がエラーのようですが、
初心者すぎて分かりません。
ネットでも調べてみたのですが分からず・・・
初歩過ぎて載ってないのかもしれません。
すいません
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-16 19:48
引用:

Jittaさんの書き込み (2005-11-16 19:37) より:

また、「推奨されていない使い方」であることも、要注意です。


それに、このソースだといつかリソース食いつぶしますね。
COM オブジェクトを解放していません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
会議室デビュー日: 2005/11/16
投稿数: 10
投稿日時: 2005-11-16 20:04
引用:

じゃんぬねっとさんの書き込み (2005-11-16 19:48) より:
それに、このソースだといつかリソース食いつぶしますね。
COM オブジェクトを解放していません。



Jittaさん、じゃんぬねっとさんご迷惑おかけしてすいません

COMオブジェクトを解放するようソース書き換えてみました。

Try
' Excelへの参照
xlsApp = CreateObject("Excel.Application")
' Excelにブックを追加
xlsBook = xlsApp.Workbooks.Add
' SheetコレクションからSheet1を取得
xlsSheet = xlsBook.Sheets("Sheet1")
' 空いているファイル番号を取得
fileNo = FreeFile()
' CSVファイルを開く
FileOpen(fileNo, filename, OpenMode.Input)
' ファイルの最後に達するまでループ
Do Until EOF(fileNo)
' 読み込んだ行数をカウント
row = row + 1
' 1行分のデータを読み込む
For col = 1 To 5
' ファイルから読み込んだ内容を変数に保存
Input(fileNo, recBuff)
' 変数の内容をExcelに送る
xlsSheet.Cells(row, col) = recBuff
Next
Loop
' CSVファイルを閉じる
FileClose(fileNo)
' Excelを表示
xlsBook.Application.Visible = True
Finally
If Not xlsApp Is Nothing Then
Try
xlsApp.Quit()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
End Try
End If
End Try


初心者な上に礼儀もなっていなくてすいません
教えていただくみなさんに失礼のないよう勉強してまいりたいと思います。
どうかよろしくお願いいたします。



[ メッセージ編集済み 編集者: 虎 編集日時 2005-11-16 20:06 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-11-16 20:05
この手「Excelファイルの自動生成」を行いたいなら、サードパーティ品のExcelCreater等を使うのが定石ですね。

Office12以降なら、自分でXMLファイルを書き換えると言うのも有りです。

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