Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用不同的页面设置打印多个文档类型_Excel_Vb.net_Printing_Ms Word_Tiff - Fatal编程技术网

Excel 使用不同的页面设置打印多个文档类型

Excel 使用不同的页面设置打印多个文档类型,excel,vb.net,printing,ms-word,tiff,Excel,Vb.net,Printing,Ms Word,Tiff,我有一个运行的自动化脚本,它的输出是各种文档类型,并使用各种打印机设置打印这些文档。我在同一台打印机上打印所有文档,这很好。我有三张excel工作表需要打印。我正在使用内置的“PrintOutEx”方法打印这些文件。一个放在字母大小的纸上,两个放在11x17的纸上。接下来,我让脚本打印一个word文档,我正在使用内置的“PrintOut”方法打印它。这将在11x17纸张上打印,但要缩放,以便两页并排打印。最后,我必须打印一个多页tiff文档,我正在使用打印处理程序打印该文档。我对此有很多问题,如

我有一个运行的自动化脚本,它的输出是各种文档类型,并使用各种打印机设置打印这些文档。我在同一台打印机上打印所有文档,这很好。我有三张excel工作表需要打印。我正在使用内置的“PrintOutEx”方法打印这些文件。一个放在字母大小的纸上,两个放在11x17的纸上。接下来,我让脚本打印一个word文档,我正在使用内置的“PrintOut”方法打印它。这将在11x17纸张上打印,但要缩放,以便两页并排打印。最后,我必须打印一个多页tiff文档,我正在使用打印处理程序打印该文档。我对此有很多问题,如果这些是愚蠢的问题,我道歉,并感谢我能收集到的任何帮助

  • 我试图保持默认打印机与启动子例程时相同,但使用PrinterSettings方法似乎无法工作
  • 关于默认打印机:默认打印机更改为我想要的打印机(最后不更改)。默认打印机设置为11x17。如果将打印机的默认设置更改为8.5x11,则所有内容都将打印为8.5x11
  • 脚本似乎忽略了我提供的设置/页面设置/设置
  • word文档打印没有按比例缩放以适合纸张,我尝试将纸张大小设置为11x17和8.5x11,并缩放打印,但这看起来非常糟糕
  • 第一张excel工作表不能打印成字母大小的纸张
  • 第二个和第三个工作表工作正常(只要默认打印机设置符合要求,请参见第2点)
  • 只要默认打印机的默认设置正确,多页tiff文档就可以正常打印
  • 我不是一个专业的程序员,所以如果问题的答案很简单或者代码看起来很恐怖,我向你道歉。我对这个问题进行了大量研究,但没有找到有效的解决方案(我一行一行地检查代码,没有错误。我正在附上迄今为止的代码

    谢谢

    Public Sub PrintSPIDPackage(SPID As String)
    
        On Error GoTo errHandler
    
        Dim printerSettings As New Printing.PrinterSettings
        Dim curPrinter As String
        Dim engPrinter As String
        Dim purPrinter As String
    
        engPrinter = "engBLAH"
        purPrinter = "purBLAH"
        curPrinter = printerSettings.PrinterName
    
        Dim spidBBPath As String
    
        spidBBPath = ****REDACTED
        spidDrawingPackagePath = ***REDACTED*** 
    
        Dim eAPP As New Excel.Application
        Dim wB As Excel.Workbook
        Dim wS As Excel.Worksheet
        Dim rng As Excel.Range
        Dim lRow As Integer
        Dim wAPP As New Word.Application
        Dim doc As Word.Document
    
        wB = eAPP.Workbooks.Open(spidBBPath)
    
        wS = wB.Worksheets(selectedSheet & " OPs")
        wS.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperLetter 'I would think this causes the printer to printout to a letter size paper
        wS.PrintOutEx(ActivePrinter:=engPrinter)
        wS = wB.Worksheets(selectedSheet)
        lRow = wS.Range("A" & wS.Rows.Count).End(Excel.XlDirection.xlUp).Row + 3
        rng = wS.Range("A1:I" & lRow)
        rng.PrintOutEx(ActivePrinter:=engPrinter) 'PRINT SHOULD BE AN 11x17
        wS = wB.Worksheets(selectedSheet & " MLB")
        wS.PrintOutEx(ActivePrinter:=engPrinter) 'PRINT SHOULD BE AN 11x17
    
        wB.Close(False)
        eAPP.Quit()
        Runtime.InteropServices.Marshal.ReleaseComObject(wS)
        Runtime.InteropServices.Marshal.ReleaseComObject(wB)
        Runtime.InteropServices.Marshal.ReleaseComObject(eAPP)
    
        If InStr(xPath, ".doc") <> 0 Then
            doc = wAPP.Documents.Open(xPath)
            wAPP.ActivePrinter = engPrinter
            doc.PageSetup.PaperSize = Word.WdPaperSize.wdPaperLetter ''''''print out should be 11x17 with two pages side by side
            wAPP.PrintOut(PrintZoomColumn:=2, PrintZoomRow:=1) ', PrintZoomPaperHeight:=2 * (11 * 1440), PrintZoomPaperWidth:=2 * (8.5 * 1440)) '''''AS you see I tried scaling...
            doc.Close(False)
            doc = Nothing
            wAPP.Quit()
            wAPP = Nothing
        End If
    
        Dim pDoc As New Printing.PrintDocument
        currPage = 0
    
        AddHandler pDoc.PrintPage, AddressOf pDocPage
    
        PrintDialog1.Document = pDoc
        pDoc.DefaultPageSettings.Landscape = True
        pDoc.DocumentName = SPID & "-Drawing Package"
        pDoc.PrinterSettings.PrinterName = engPrinter
        pDoc.DefaultPageSettings.Landscape = True
        pDoc.DefaultPageSettings.Margins.Left = 50
        pDoc.DefaultPageSettings.Margins.Right = 50
        pDoc.DefaultPageSettings.Margins.Top = 50
        pDoc.DefaultPageSettings.Margins.Bottom = 50
    
        Dim ps As New Printing.PaperSize("Tabloid", 1700, 1100)
        ps.PaperName = Printing.PaperKind.Tabloid
        pDoc.DefaultPageSettings.PaperSize = ps
        pDoc.Print()
    
        printerSettings.PrinterName = curPrinter 'this should reset the user's default printer to the original setting to before when this routine started??
    
        Exit Sub
    
    errHandler:
        MsgBox(Err.Description)
    
    End Sub
    
    Sub pDocPage(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs)
    
        Dim img As Image = Image.FromFile(spidDrawingPackagePath)
        Dim pCount = img.GetFrameCount(FrameDimension.Page)
    
        img.SelectActiveFrame(FrameDimension.Page, currPage)
    
        Using stReader As IO.MemoryStream = New IO.MemoryStream
            img.Save(stReader, ImageFormat.Bmp)
            Dim bmp As Bitmap = CType(Image.FromStream(stReader), Bitmap)
            e.Graphics.DrawImage(bmp, 0, 0)
            bmp.Dispose()
        End Using
    
        currPage += 1
    
        If currPage < pCount Then
            e.HasMorePages = True
        End If
    
    End Sub
    
    公共子打印SPID包(SPID为字符串)
    关于错误转到错误处理程序
    调暗打印机设置为新打印。打印机设置
    将打印机设置为字符串
    将打印机设置为字符串
    暗紫色打印机作为字符串
    engPrinter=“engBLAH”
    purPrinter=“purBLAH”
    curPrinter=printerSettings.PrinterName
    将spidBBPath设置为字符串
    spidBBPath=****已编辑
    spidDrawingPackagePath=***已编辑***
    Dim eAPP作为新的Excel.Application
    将wB设置为Excel.工作簿
    将wS设置为Excel.Worksheet
    尺寸为Excel.Range
    Dim lRow作为整数
    dimwapp作为新词的应用
    Dim doc作为Word.Document
    wB=eAPP.Workbooks.Open(spidbpath)
    wS=wB.工作表(选定工作表和“OPs”)
    wS.PageSetup.PaperSize=Excel.XlPaperSize.xlPaperLetter'我认为这会导致打印机打印出字母大小的纸张
    wS.PrintOutEx(ActivePrinter:=engPrinter)
    wS=wB.工作表(选定工作表)
    lRow=wS.Range(“A”&wS.Rows.Count).End(Excel.XlDirection.xlUp).Row+3
    rng=wS.范围(“A1:I”和lRow)
    rng.PrintOutEx(ActivePrinter:=engPrinter)的打印应该是11x17
    wS=wB.工作表(选定工作表和“MLB”)
    wS.PrintOutEx(ActivePrinter:=engPrinter)的打印应该是11x17
    wB.关闭(错误)
    eAPP.Quit()
    Runtime.InteropServices.Marshal.ReleaseComObject(wS)
    Runtime.InteropServices.Marshal.ReleaseComObject(wB)
    Runtime.InteropServices.Marshal.ReleaseComObject(eAPP)
    如果InStr(xPath,“.doc”)为0,则
    doc=wAPP.Documents.Open(xPath)
    wAPP.ActivePrinter=engPrinter
    doc.PageSetup.PaperSize=Word.WdPaperSize.wdPaperLetter“打印输出应为11x17,两页并排
    打印输出(PrintZoomColumn:=2,PrintZoomRow:=1),PrintZoomPaperHeight:=2*(11*1440),PrintZoomPaperWidth:=2*(8.5*1440)),正如您看到的,我尝试了缩放。。。
    单据关闭(假)
    doc=无
    wAPP.Quit()
    wAPP=无
    如果结束
    Dim pDoc作为新的Printing.PrintDocument
    currPage=0
    AddHandler pDoc.PrintPage,pDocPage的地址
    PrintDialog1.Document=pDoc
    pDoc.DefaultPageSettings.横向=真
    pDoc.DocumentName=SPID&“绘图包”
    pDoc.PrinterSettings.PrinterName=engPrinter
    pDoc.DefaultPageSettings.横向=真
    pDoc.DefaultPageSettings.Margins.Left=50
    pDoc.DefaultPageSettings.Margins.Right=50
    pDoc.DefaultPageSettings.Margins.Top=50
    pDoc.DefaultPageSettings.Margins.Bottom=50
    作为新印刷品的暗淡ps。纸张尺寸(“小报”,17001100)
    ps.PaperName=打印.PaperKind.Tabloid
    pDoc.DefaultPageSettings.PaperSize=ps
    pDoc.Print()
    printerSettings.PrinterName=curPrinter'当此例程启动时,应将用户的默认打印机重置为之前的原始设置??
    出口接头
    错误处理程序:
    MsgBox(错误描述)
    端接头
    子pDocPage(ByVal发送方作为对象,ByVal e作为打印。PrintPageEventArgs)
    Dim img As Image=Image.FromFile(spidDrawingPackagePath)
    Dim pCount=img.GetFrameCount(FrameDimension.Page)
    img.选择活动框架(FrameDimension.Page,currPage)
    将stReader用作IO.MemoryStream=新IO.MemoryStream
    保存(stReader,ImageFormat.Bmp)
    将bmp设置为位图=CType(Image.FromStream(stReader),位图)
    e、 Graphics.DrawImage(bmp,0,0)
    bmp.Dispose()
    终端使用
    当前页面+=1
    如果当前页面
    您遇到了哪些问题?它会抛出错误吗?注释掉错误上的
    转到errHandler
    行可能会有所帮助,因此它会抛出一个错误,您可以单击“调试”查看它发生在哪一行。没有错误弹出窗口,蝙蝠侠先生。1.用户的默认打印机不会更改回“curPrinter”。版画如下所示