簡體   English   中英

打印時,多余的白紙將通過! 為什么?

[英]When printing extra blank paper is sent through! Why?

在VB.net中獲得了該算法,該算法可以操縱並打印excel文檔,但是每次我打印時,在要打印的文檔之前,我都會得到一張額外的紙! Excel工作表上沒有多余的頁面或類似的東西! 誰能在代碼中找到原因,還是有人知道原因? 謝謝

Sub Cmd_PrintClick(sender As Object, e As EventArgs)

    'print 1 page
    printDocument.PrinterSettings.Copies = 1
    'print document (see Sub PrintDocumentPrintPage below ...)
    printDocument.Print

End Sub

Sub PrintDocumentPrintPage(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs)

    Dim oApp As New Excel.Application
    Dim oWB As Excel.Workbook = oApp.Workbooks.Add()
    Dim oWS As Excel.Worksheet = CType(oWB.Worksheets(1), Excel.Worksheet)

    Dim oRng1 As Excel.Range
    Dim search As String = ""

    SQLcommand = SQLconnect.CreateCommand
    'Create SQL statement
    SQLcommand.CommandText = "SELECT * FROM Bill_Record WHERE Paid = 'F'"
    'Extract data
    SQLreader = SQLcommand.ExecuteReader()

    While SQLreader.Read()

    search = "" 
    search = SQLreader("Pupil_ID")

    oWB = oApp.Workbooks.Open("F:\Kids Club Database\Kids Club Database v2\Backup\ContactsDatabase\bin\Debug\Bill.xlsx")
    oWS = oWB.Worksheets("Sheet1")

    oRng1 = oWS.Range("F34")
    oRng1.Value = Microsoft.VisualBasic.Left(SQLreader("Payment_Due_Date"),10)

    oRng1 = oWS.Range("A19")
    oRng1.Value =  Microsoft.VisualBasic.Left(SQLreader("Bill_Date"),10)

    oRng1 = oWS.Range("A13")
    oRng1.Value = SQLreader("Term")

    oRng1 = oWS.Range("C47")
    oRng1.Value = SQLreader("Term")

    oRng1 = oWS.Range("H28")
    oRng1.Value = SQLreader("Total_Term_Cost")

    oRng1 = oWS.Range("C48")
    oRng1.Value = SQLreader("Total_Term_Cost")

    oRng1 = oWS.Range("F22")
    oRng1.Value = SQLreader("Total_Sessions_Monday")

    oRng1 = oWS.Range("H22")
    oRng1.Value = SQLreader("Total_Monday_Cost")

    oRng1 = oWS.Range("F23")
    oRng1.Value = SQLreader("Total_Sessions_Tuesday")

    oRng1 = oWS.Range("H23")
    oRng1.Value = SQLreader("Total_Tuesday_Cost")

    oRng1 = oWS.Range("F24")
    oRng1.Value = SQLreader("Total_Sessions_Wednesday")

    oRng1 = oWS.Range("H24")
    oRng1.Value = SQLreader("Total_Wednesday_Cost")

    oRng1 = oWS.Range("F25")
    oRng1.Value = SQLreader("Total_Sessions_Thursday")

    oRng1 = oWS.Range("H25")
    oRng1.Value = SQLreader("Total_Thursday_Cost")

    oRng1 = oWS.Range("F26")
    oRng1.Value = SQLreader("Total_Sessions_Friday")

    oRng1 = oWS.Range("H26")
    oRng1.Value = SQLreader("Total_Friday_Cost")



    'Clear SQL command buffer
    SQLcommand.Dispose()

    SQLcommand = SQLconnect.CreateCommand
    'Create SQL statement
    SQLcommand.CommandText = "SELECT Pupil_Name, Pupil_Surname, Form_ID FROM Pupil WHERE Pupil_ID = '" & search &"'"
    'Extract data
    SQLreader = SQLcommand.ExecuteReader()

    oRng1 = oWS.Range("A16")
    oRng1.Value = SQLreader("Pupil_Name") & " " & SQLreader("Pupil_Surname")

    oRng1 = oWS.Range("C46")
    oRng1.Value = SQLreader("Pupil_Name") & " " & SQLreader("Pupil_Surname")

    oRng1 = oWS.Range("A17")
    oRng1.Value = SQLreader("Form_ID")

    'Clear SQL command buffer
    SQLcommand.Dispose()

    SQLcommand = SQLconnect.CreateCommand
    'Create SQL statement
    SQLcommand.CommandText = "SELECT * FROM Price"
    'Extract data
    SQLreader = SQLcommand.ExecuteReader()

    oRng1 = oWS.Range("D22")
    oRng1.Value = SQLreader("Price_Monday")

    oRng1 = oWS.Range("D23")
    oRng1.Value = SQLreader("Price_Tuesday")

    oRng1 = oWS.Range("D24")
    oRng1.Value = SQLreader("Price_Wednesday")

    oRng1 = oWS.Range("D25")
    oRng1.Value = SQLreader("Price_Thursday")

    oRng1 = oWS.Range("D26")
    oRng1.Value = SQLreader("Price_Friday")

    'Clear SQL command buffer
    SQLcommand.Dispose()

    oRng1 = Nothing   ' <-- Don't forget!
    oWB.PrintOut()
    oWB.Close()
    oWB = Nothing

    oWS = Nothing
    oApp.Quit()
    oApp = Nothing

    End While

    End Sub

嘗試更改:

oWB.PrintOut()

至:

oWB.PrintOut(From:=1, [To]:=1, Copies:=1, Collate:=False)

編輯

另外,請確保設置所需的PageSetup (表格):

With oWS.PageSetup
    .Zoom = False
    .PaperSize = XlPaperSize.xlPaperA4
    .Orientation = XlPageOrientation.xlPortrait
    .FitToPagesTall = 1
    .FitToPagesWide = 1
End With

編輯2

那么為什么要額外留白頁呢? 就這么簡單。 您已將excel互操作代碼放置在PrintDocumentPrintPageEvent中。 因此,多余的頁面將由PrintDocument打印。

Sub PrintDocumentPrintPage(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs)
    e.Cancel = True '< Do not print
    'YOUR CODE...
End Sub

或將所有內容移到單獨的子目錄並在需要時調用:

Private Sub PrintXLS()
    'YOUR CODE...
End Sub

昏暗的oWS作為Excel.Worksheet = CType(oWB.Worksheets(1),Excel.Worksheet)

我認為應該是:

昏暗的oWS作為Excel.Worksheet = CType(oWB.Worksheets(0),Excel.Worksheet)

編輯1:

怎么樣:

昏暗的oWS作為Excel.Worksheet = oWB.Worksheets.Add(新Excel.Worksheet)

我認為正在發生的事情是,您將工作表添加到工作表位置1而不是工作表位置0,因此首先打印第一個工作表(空白表),然后打印您嘗試使用的工作表。

編輯2:

oWB = oApp.Workbooks.Open("F:\Kids Club Database\Kids Club Database v2\Backup\ContactsDatabase\bin\Debug\Bill.xlsx")
oWS = oWB.Worksheets("Sheet1")

oRng1 = oWS.Range("F34") ' Put a break point on this line and check the oWB.Worksheets collection and see how many worksheets there are in the collection and make sure the first one is named "Sheet 1"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM