none
[問題]VBA-使用網頁方式產生EXCEL報表檔 RRS feed

  • 問題

  • 大家好:
    第一次發問,如有不妥之處,請指教…!

    想要利用網頁的方式,使用者鍵入相關資料後產生出「*.xls」,
    並使其列印。
    意指:
    使用者利用IE瀏覽器,藉由所撰寫的表單,輸入相關資料後;
    按一個按鈕,其按鈕主要功用為產生出Excel表格,並為橫式列印。

    但是試了好幾次,網路上也沒有相關的資料,大部份皆為VBA語法,
    手邊也有VBA-EXCEL的書(書名:Excel VBA 功能索引式參考手冊),
    但是對我所要的功能似乎沒有什麼幫助,看了看MSDN也是跟書上寫
    的差不多,不知道是語法錯誤,還是物件呼叫錯誤,以下為我的程式
    碼,煩請知道的大大能指教一番,謝謝!

    Client端電腦:
    OS:Windows XP Professional SP2
    Office:Office XP SP3
    HTML撰寫軟體:Dreamweaver 8.02

    Server端電腦:
    OS:Windows 2000 Server SP4
    Office:Office XP SP3
    IIS:5.0以上

    紅色部份就是我一直無法試成功的部份,所以我一直在Try,有的就
    mark成註解了。

    程式碼:
    <%
    On Error Resume Next

    Dim objExcelApp,objExcelBook,objExcelSheets,objExcelSheet,sfso

    Set objExcelApp = Server.CreateObject("Excel.Application")
    Set sfso = CreateObject("Scripting.FileSystemObject")
    objExcelApp.DisplayAlerts  =  False
    objExcelApp.Application.Visible = False

    objExcelApp.WorkBooks.Add
    '設定"活頁簿"變數
    set objExcelBook = objExcelApp.ActiveWorkBook
    '設定"工作表集合"變數--表複數
    set objExcelSheets = objExcelBook.Worksheets
    '設定"工作表"變數--表單一數
    set objExcelSheet = objExcelBook.Sheets(1)

    '畫格線
    objExcelSheet.Range("B2:E6").Borders.LineStyle = 1

    '語法全部樣子--1
    objExcelApp.ActiveWorkBook.Sheets(1).Range("D3")="Test3"
    '語法全部樣子--2
    objExcelBook.Sheets(1).Range("C3")="Test2"
    objExcelSheet.Range("B3")="Test1"

    objExcelSheet.Range("B4")="Lucky NO."
    objExcelSheet.Range("B4:E4").Merge
    objExcelSheet.Range("B4:E4").HorizontalAlignment = 7

    '命名Sheet1工作表為"Test"
    objExcelSheet.Name = "Test"

    '列印格式為橫式
    objExcelApp.ActiveWorkBook.Sheets(1).PageSetup.Orientation = xlLandScape
    'objExcelBook.Sheets("Sheet1").Activate
    'objExcelBook.Sheets("Sheet1").Range("A1:I16").PageSetup.Orientation = xlLandscape

    '設定印表機---無作用
    'objExcelApp.Application.ActivePrinter = "HP5100 no Ne01:"

    '設定列印範圍---無作用
    'objExcelSheet.PageSetup.PrintArea = "B4:E6"
    'objExcelBook.Sheets(1).PageSetup.PrintArea = "B4:E6"
    'objExcelApp.ActiveWorkBook.Sheets(1).PageSetup.PrintArea = "B4:E6"

    '預覽列印---無作用
    'objExcelSheet.PrintPreview

    '直接列印---無作用
    'objExcelSheet.PrintOut

    '存檔
    fname = "basic"
    objExcelSheet.SaveAs server.MapPath("\xls") & "\" & fname & ".xls"
    objExcelApp.quit

    '釋放記憶體
    set objExcelApp = nothing
    set objExcelBook = nothing
    set objExcelSheets = nothing
    set objExcelSheet = nothing
    set sfso = nothing

    %>
    <HTML>
    <HEAD>
    <TITLE>Test Print</TITLE>
    </HEAD>
    <BODY>
    <p><% response.write "File Name: "&fname&".xls"%></p>
    </BODY>
    </HTML>

    以上程式倘若執行,就會產生如以下的錯誤訊息:

    HTTP 500.100 - 內部伺服器錯誤 - ASP 錯誤
    Internet Information Services


    技術資訊 (供技術支援人員使用)

    • 錯誤類型:
      Microsoft Excel (0x800A03EC)
      無法設定種類 PageSetup 的 Orientation 屬性
      /basic.asp, line 37

    • 瀏覽器類型:
      Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; NetCaptor 7.5.4; .NET CLR 2.0.50727)

    • 頁數:
      GET /basic.asp

    再次感謝!謝謝!

    2006年9月26日 上午 07:15

解答

所有回覆

  • 你的server有安裝那一台印表機嗎
    2006年9月26日 上午 07:58
  • 有!那個印表機我有安裝;可是最主要的是,我橫式列印那一關就過不了!
    2006年9月26日 上午 08:21
  • 沒看到你宣告 xlLandScape 常數值。

    Excel 的常數只在 VBA 或參照 Excel 程式庫時,才能直接用,否則請改用數值或是設定

    xlLandScape = 2

    在 ASP 中操控 Automation 時,請確認權限是否足夠:

    http://tlcheng.twbbs.org/TLCheng/Basic/vbs/dcom/automation.htm

    2006年9月26日 上午 09:15
    版主
  • 璉璉大,首先很感謝您的回覆,我照著您的指導,把那個「xlLandScape」改成"2"(數值),
    也照著您那篇『在ASP上使用元件』中的步驟,把相關設定都設定了;然後執行那支網頁
    程式,當果還是出現跟以前一樣的錯誤訊息:

  • 錯誤類型:
    Microsoft Excel (0x800A03EC)
    無法設定種類 PageSetup 的 Orientation 屬性
    /basic.asp, line 37

    不知道還有那裏有錯誤?我網頁程式的語法不知道有沒有錯誤,因為一直執行不出來,語法
    一改再改,就不知道改了有沒有錯誤!
  • 請問一下璉璉大,您那篇「在ASP上使用元件」的中文章有提到:
    "最近常看到有人問到如何透過 ASP 產生 Word 文件、Excel 檔或是啟動自製元件,這些說明在 MSDN 中均可找到",不知道您指的是Visual Studio 2005的MSDN,還是VB6中的MSDN呢?因為我看了Visual Studio 2005中的MSDN,結果發現其中的語法都是VBA的居多,所以不知道您指的是那一個?想說自己去找資料,一直麻煩大大們也不是辦法!
    謝謝,感謝!

2006年9月27日 上午 01:43
  • 你試試看把預設印表機管理權限設給 IUSR_servername 看看。

    另外在該台電腦試試能不能用 VBA 跑,此外也有些是印表機驅動程式的問題,請確認是最新的驅動程式。

    那篇是 2001 年左右寫的,所說的 msdn 指的是 http://msdn.microsoft.com/ ,當時 KB 跟 MSDN 是綁在一起,若是有訂閱 MSDN 季刊,則可在 MSDN Library 上找到。

    你說的 MSDN 是屬於特別版,正式名稱是 MSDN for Visual Studio 。一般所稱的 MSDN 光碟是指 MSDN Library 。MSDN for Visual Studio 2005 包含大部分的 MSDN Library 及 KB ,基本上都搜尋得到。

    VBScript 是 VBA 的子集,大部份可以直接移植到 VBScript 上。

    我那篇指的是 ActiveX EXE 權限的設定,可在 MSDN 上找到,Excel 操控在 MSDN 上本來就是以 VBA 最多,再來才是 VB6、VBNET,最少的是 VBScript ,但是這些基本上都是相通的,只要你熟彼此的差異,對你來說根本沒有分。

    2006年9月27日 上午 05:24
    版主
  • 璉璉大再次感謝您的回覆;按照您的指導,我把Server端的印表機管理權限設給

    "Internet 來賓帳戶",圖連結:http://homelf.kimo.com.tw/lienjoey/download/iusr.jpg

    也確定是最新的驅動程式(HP LaserJet 5100),因為HP也沒有最新的驅動程式,

    也在Server端執行一下那個"橫式列印"的VBA程式是OK的(在Excel中的巨集)

    (跟我在Client端的結果一樣);待全部設定完後,再執行那支網頁程式:basic.asp

    錯誤訊息依舊;也曾經試過分別在Client、Server端另外再安裝一臺Printer(Panasonic DP-3010)

    的驅動程式,並且試其網頁程式,還是一樣的錯誤訊息…;

    請問一下璉璉大,那個將版面設為"橫式列印"的語法,跟印表機設定有關嗎?

    如果有關的話,是Client端還是Server端的印表機有關?

    不知道我這支程式,在您的電腦中可以成功嗎?


    現在只想先跨出第一步,就是版面設定是"橫式列印"這一步(預覽列印就是橫式版本)…。

    感謝!真的感謝!

    2006年9月27日 上午 09:27
  • 我改成 VBScript 在本機直接跑可以跑,放在 asp 內不行,有可能是權限問題或其他問題
    2006年9月27日 上午 11:26
    版主
  • 璉璉大,我到MSDN Library找了找有關PageSetup的語法,

    連結:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl10/html/xltocObjectModelWorksheet.asp

    發現Microsoft Excel Objects (Worksheet)PageSetup底下,只有Graphic

    如圖:http://homelf.kimo.com.tw/darrenlien_kimo/download/Pagesetup.jpg

    但是點了PageSetup之後,進去網頁裡面看,

    如圖:http://homelf.kimo.com.tw/darrenlien_kimo/download/Pagesetup-Ori.jpg

    看見".Pagesetup.Orientation = xlLandscape"這一句語法;奇怪的是,我依樣畫葫蘆,

    就出現:

    .錯誤類型:
     Microsoft Excel (0x800A03EC)
     無法設定種類 PageSetup 的 Orientation 屬性
     /basic.asp, line 37


    的錯誤訊息,難道我呼叫的元件有誤嗎?

    底下為我程式中的語法,兩句都會產生如上的錯誤訊息;
    objExcelBook.Sheets(1).PageSetup.Orientation = 2
    objExcelApp.ActiveWorkBook.Sheets(1).PageSetup.Orientation = 2

    PageSetupOrientation難道它不是在"Application - WorkBook - Sheets - Sheet1"底下嗎?

    可是它的範例,不就是這樣的表示嗎?實在令人摸不著頭緒,有人可以幫我解答嗎?

    謝謝!

    2006年9月28日 上午 09:09
  • 這是物件圖:http://homelf.kimo.com.tw/darrenlien_kimo/download/Pagesetup.jpg

    屬性並不會放入物件圖內。

    我前面說過了,直接在 VBScript 可以跑,所以不是程式碼問題,可能是權限或是 ASP 禁止存取的問題。

    2006年9月28日 下午 02:15
    版主