ASP で Excel を使用する 1 つの方法は、Excel ファイルをデータベースとしてリンクすることであり、その操作は Access データベースの操作と似ています。ただし、Excel はリレーショナル データベースではないため、この方法が常に役立つとは限りません。複雑なセルの結合、境界線のスタイル、パターン、セル間の数式関係などが含まれる固定形式の場合、バックグラウンドで既存の設定を開くのが最も簡単な方法だと思います。テンプレート ファイルを作成し、次の場所にデータを挿入します。
ここで説明する方法は、
Excel オブジェクトを直接作成することであり、バックグラウンドで Excel ドキュメントに対するさまざまな操作を簡単に実行できます。
サーバー側でもう1つ設定する必要があるのは、COMコンポーネントの操作権限です。コマンド ラインに「DCOMCNFG」と入力して、COM コンポーネント構成インターフェイスを開き、[プロパティ] ボタンをクリックして、3 つの無線オプションすべてに [Everyone] を追加します。保存後、サーバーを再起動します。
これは非常に重要です。これが設定されていない場合、他のコンピューターは Excel オブジェクトの作成を完了できません。
ただし、この方法には欠点もあります。サーバー上にすでに開いている Excel ファイルがあり、そのファイルを実行すると、まだ原因がわかりません。設置されていない場所。
さらに、上で引用した記事のサンプル コードの形式は完全ではなく、改行やスペースの多くは正確な形式ではありません。コードが完全であれば、コードをコピーするだけで正常に実行されます。その後、ゆっくりと調べてください。これを変更すると、簡単に開始できるようになります。変更後のコードは次のようになります (グラフを描画する部分は削除されています)。
<%
エラー時は次へ再開
strAddr=Server.MapPath(".")
set objExcelApp=CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=false
objExcelApp.Application.Visible=false
objExcelApp.WorkBooks.Open(strAddr&"TempletNull.xls")
set objExcelBook=objExcelApp.ActiveWorkBook
set objExcelSheets=objExcelBook.Worksheets
set objExcelSheet=objExcelBook.Sheets(1)
objExcelSheet.Range("B2:k2").Value=Array("Week1","Week2","Week3","Week4","Week5","Week6","Week7 ")
objExcelSheet.Range("B3:k3").Value=Array("67","87","5","9","7","45","45","54","54" 、「10」)
objExcelSheet.Range("B4:k4").Value=Array("10","10","8","27","33","37","50","54","10" 、「10」)
objExcelSheet.Range("B5:k5").Value=Array("23","3","86","64","60","18","5","1","36" 、「80」)
objExcelSheet.Cells(3,1).Value="InternetExplorer"
objExcelSheet.Cells(4,1).Value="ネットスケープ"
objExcelSheet.Cells(5,1).Value="その他"
objExcelSheet.Range("b2:k5").Select
SaveAs(strAddr&"TempExcel.xls")
objExcelApp.Quit
set objExcelApp=なし
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<頭>
<TITLE>新しいドキュメント</TITLE>
<METANAME="ジェネレーター"CONTENT="MicrosoftFrontPage5.0">
<METANAME="著者"CONTENT="">
<METANAME="キーワード"CONTENT="">
<METANAME="説明"CONTENT="">
</HEAD>
<本体>
</BODY>
</HTML>
Excel ファイルを操作した後、実際にファイルを出力するには、ASP の Excel へのリダイレクト メソッドを使用する必要があります。場合によっては、必要に応じて、[ダウンロード、開く、保存] ウィンドウが表示されます。 IE で直接開くには、FSO を使用して Excel ファイルをロードし、IE で出力します。
<%
Dim Fso,FileExt,strFilePath,Mime
strFilePath = "f:aspxuexi.doc"
Set Fso=Server.CreateObject("Scripting.FileSystemObject")
FileExt = Fso.GetExtensionName(strFilePath)
fso=Nothing を設定
Case FileExt を選択
ケース「ドキュメント」
Mime="アプリケーション/msword"
ケース「xls」
Mime="アプリケーション/msexcel"
終了選択
Call OutPut(strFilePath,Mime)
'#################################### # #############
関数出力(strFilePath,Mime)
Response.ContentType = Mime
Const adTypeBinary = 1
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath
Response.BinaryWrite objStream.Read
objStream.Close
objStream = なしを設定します
終了機能
'############################################# ## ###
%>
実際のアプリケーションでは。サーバーが Excel または ACCESS プログラムを実行している場合、クライアントは Excel の作成を送信します。アプリケーション オブジェクトは成功できません。別の状況では、クライアントがリクエストを送信してもリクエストは終了せず、別のクライアントによって送信されたリクエストは成功しません。この問題には他の解決策があるかもしれませんが、少なくともこれは不安定です。
たまたま社内のイントラネットに関連した成功事例があったので探してみると、クライアント上でExcelを作成していました。応用。こうすることで、サーバー側で競合が発生しなくなります。クライアントの場合、LAN 内で実行されているため、クライアント IE のセキュリティ レベルを低く設定し、関連するアクティブ (調査) を設定できます。設定がない場合でも、IE は警告ウィンドウをポップアップ表示します。 activeX?"
実装されたコードは前のログと似ており、次のとおりです。
<script language="vbscript">
set objExcelApp=CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=true
objExcelApp.WorkBooks.Open(" http://XXX.XXX.XXX/XXX.xls ")
' 完全なネットワーク アドレスの xls ファイルはフォーマットされて印刷され、サーバーに保存されています。
set objExcelBook=objExcelApp.ActiveWorkBook
set objExcelSheets=objExcelBook.Worksheets
set objExcelSheet=objExcelBook.Sheets(1)
'====Excel のセルにデータを入力するためのステートメントは次のとおりです。データがデータベースから抽出される場合、これらのステートメントはバックグラウンド プログラムによって生成できます。ASP の列は次のとおりです。
'例:response.write "objExcelSheet.Range(""B2"").Value="""&rs("XXX")&""""
'または objExcelSheet.Range("B2").Value="<%=rs("XXX")%>"
objExcelSheet.Range("B2:k2").Value=Array("Week1","Week2","第 3 週"、"第 4 週"、"第 5 週"、"第 6 週"、"第 7 週")
objExcelSheet.Range("B3:k3").Value=Array("67","87","5","9","7","45","45","54","54" 、「10」)
objExcelSheet.Range("B4:k4").Value=Array("10","10","8","27","33","37","50","54","10" 、「10」)
objExcelSheet.Range("B5:k5").Value=Array("23","3","86","64","60","18","5","1","36" 、「80」)
objExcelSheet.Cells(3,1).Value="InternetExplorer"
objExcelSheet.Cells(4,1).Value="ネットスケープ"
objExcelSheet.Cells(5,1).Value="その他"
'==================
'objExcelApp.Quit
'set objExcelApp=Nothing
</script>
上記のコードでは
'objExcelApp.終了
'set objExcelApp=Nothing は
キャンセルとして使用されます。ここでは Excel.application を閉じないでください。閉じないと、データが入力された後に Excel が閉じられてしまいます。このとき、クライアント上で開いたExcelファイルをクライアント側で修正または印刷する必要があります。同時に、objexcelapp オブジェクトには、印刷設定と印刷プレビュー インターフェイスに入るメソッドもあります。関連する Excel 関連情報を参照してください。