【问题标题】:When printing extra blank paper is sent through! Why?打印时会发送额外的空白纸!为什么?
【发布时间】:2014-01-11 17:34:54
【问题描述】:

在 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

【问题讨论】:

  • 如果您使用电子表格并进行打印预览(只是没有代码的模板),它会在那里显示一张空白表吗?
  • 试过了,肯定前后没有多余的空白页!
  • 你确定e.HasMorePages = False
  • 我确定它没有任何多余的页面!如果我直接从 excel 打印,则只有文档上的页面从打印机中出来!没有空白页!

标签: vb.net excel sqlite printing


【解决方案1】:

尝试改变:

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

【讨论】:

  • 把这个放到系统里!还是不喜欢!
  • 嗯...只是为了好玩,设置.PageSetup.PrintArea = "$A$1:$A$1"
  • 尝试将oWB.PrintOut 更改为oWS.PrintOut。 (从工作簿到工作表)。哈哈,看看这里的“示例”部分:msdn.microsoft.com/en-us/library/office/ff194365.aspx
  • 那么我的想法已经不多了。等一下。我会更新我的答案。
  • 你先生是世界上最了不起的人!非常感谢哦!最后的编辑效果很好!
【解决方案2】:

Dim oWS As Excel.Worksheet = CType(oWB.Worksheets(1), Excel.Worksheet)

我认为应该是:

Dim oWS As Excel.Worksheet = CType(oWB.Worksheets(0), Excel.Worksheet)

编辑 1:

怎么样:

Dim oWS As Excel.Worksheet = oWB.Worksheets.Add(New 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多