- - PR -
Excelと連携したWebサービス構築
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 - 内部サーバー エラー となってしまい先に進めません。 本当に無知ですいません。どなたか教えていただけるとうれしいです。 | ||||
|
投稿日時: 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 18:26
kernelさんありがとうございます。
そーですよね。自分が同じ質問されても答えられないです・・・ すいません。 Visual Studio .netでDebugでビルドするとエラーは出ないんです。 そして、ExcelのVisual Basic EditorのWeb ReferenceでそのWebサービスを追加して Webサービスのメソッドを呼び出すマクロを作成し、 実行するとまさにkernelさんがおっしゃる通り、 「ActiveX コンポーネントを作成できません」 というエラーがでます。 想像で分かるなんて本当にすごい!!! ありがとうございます。 過去ログを参考にし、試してみます。 | ||||
|
投稿日時: 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 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の太字の部分がエラーのようですが、 初心者すぎて分かりません。 ネットでも調べてみたのですが分からず・・・ 初歩過ぎて載ってないのかもしれません。 すいません | ||||
|
投稿日時: 2005-11-16 19:48
それに、このソースだといつかリソース食いつぶしますね。 COM オブジェクトを解放していません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-11-16 20:04
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 ] | ||||
|
投稿日時: 2005-11-16 20:05
この手「Excelファイルの自動生成」を行いたいなら、サードパーティ品のExcelCreater等を使うのが定石ですね。
Office12以降なら、自分でXMLファイルを書き換えると言うのも有りです。 |