1

サービスを開発し、それを w2003 ボックスにインストールして、Excel ファイルを読み取り、その情報を処理する必要があります。プロセスは次のとおりです。ユーザーは FTP を使用して Excel ファイルをアップロードし、サービスはそれらのファイルを取得して検証し、SQL Server DB を更新する必要があります。

アプリケーションはコンピュータ上では問題なく動作しますが、サーバー上ではライブラリを要求されますが、MS Office 2003 Primary Interop Assemblies をインストールしようとすると、システムに「製品をインストールする前に Microsoft Office 2003 をインストールしてください」と表示されます。

OKなどを要求する必要があるため、サーバーのアップグレードは避けたいと思います。サーバーに更新をインストールせずにExcelファイルを読み取る簡単な方法はありますか。

どんなコメントでも大歓迎です。

ありがとう、m0dest0。

ps。vb.net と vs 2008 を使用します。

4

3 に答える 3

2

サーバーでの相互運用機能の使用はMSではサポートされていません-http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757# kb2を参照してください

Windows Vista MSは、Windowsサービスが「デスクトップのような」ことを実行できないようにするいくつかのセキュリティ関連の対策を導入したため、それを機能させるにはいくつかのセキュリティ対策を回避する必要があります(推奨されません!)。

サーバーシナリオでExcelを処理するには、いくつかのオプション(無料および商用)があります。

Aspose.CellsFlexcelをお勧めします... SpreadsheetGearを試しませんでしたが、それについて多くの良いことを聞いて読んでください...

無料のオプション(ただし、新しいxlsx形式のみ!)は、たとえば MSおよびEPPlusのOpenXML2です。

于 2011-10-18T16:35:15.137 に答える
0

Excelファイルを処理する必要がある場合は、Excelデータリーダー(http://exceldatareader.codeplex.com/)を使用します。xlsファイルとxlsxファイルを問題なく処理し、サーバーOS上のいくつかのアプリケーションで実行しています。各シートをDataTableオブジェクトとして保存し、DataTableの各「セル」は同じアドレスのExcelセルに対応します。SQL Serverリンクの設定方法によっては、コンテンツをDBにダンプするために必要な変換がそれほど多くない場合があります。

于 2011-10-18T19:10:42.747 に答える
0

最近のバージョンの Windows Server に何もインストールする必要のないソリューションの場合.....正確な VB.NET コードはわかりませんが、Microsoft OLEDB ドライバーを使用して、どのマシンでも簡単にこれを実行できるはずです。最近のバージョンの Windows サーバーで利用できるか、非常に古いバージョンの Windows サーバー用の Microsoft Web サイトから無料でダウンロードしてインストールできます。これを疑似コード化してみますので、VB.NET に適応させる必要があります。フィールドを名前で参照するには、ワークシートで選択した領域の最初の行の列の値にフィールド名が含まれている必要があります。それ以外の場合は、数値を使用して、返された各フィールドを列位置でインデックス付けする必要があります。

Set objExcelConnection = CreateObject("ADODB.Connection")
objExcelConnection.Provider = "Microsoft.Jet.OLEDB.4.0"
objExcelConnection.ConnectionString = "Data Source=d:\path\to\excel\file\on\your\server.xls;Extended Properties=""Excel 8.0;IMEX=1;"";"
objExcelConnection.CursorLocation = 3
objExcelConnection.Open


sSQL = "select * from [worksheetname$]"
set rsWorksheet = objExcelConnection.Execute(sSQL)
do while not rsWorksheet.Eof
    sValue = rsWorksheet("FieldName")
    rsWorksheet.MoveNext
loop
rsWorksheet.Close

set objExcelConnection = nothing
于 2011-10-18T16:48:04.040 に答える