Foxtable(狐表)用户栏目专家坐堂 → 直接打印Excel表时,如何指定“页面设置”上的打印质量


  共有3918人关注过本帖树形打印复制链接

主题:直接打印Excel表时,如何指定“页面设置”上的打印质量

帅哥哟,离线,有人找我吗?
xvkewen
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
直接打印Excel表时,如何指定“页面设置”上的打印质量  发帖心情 Post By:2018/10/8 14:53:00 [显示全部帖子]

如题,直接打印Excel表时,如何指定“页面设置”上的打印质量?

比如,我们打印Excel正常情况下默认都是"300点/英寸",我想让用以下代码指定一个打印机来打印,这时我需要设置打印质量为“96点/英寸”,才可以达到最好的打印效果;

Dim App As New MSExcel.Application

Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)

Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)

Ws.PrintOut(Preview:=False,ActivePrinter:="doPDF v7")    '直接打印,但是没有指定打印质量,没有达到最好的打印效果;

App.Quit



此主题相关图片如下:asdf.jpg
按此在新窗口浏览图片


 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/12 12:05:00 [显示全部帖子]

我的代码如下,但运行的时候出现以下错误不能正常打印,是哪错了吗?


图片点击可在新窗口打开查看此主题相关图片如下:sd.jpg
图片点击可在新窗口打开查看

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.Cells
Rg.WrapText = True
Rg.EntireRow.AutoFit  '自动调整行高
wb.saved = True
App.DisplayAlerts = False
App.Visible = True
App.ActivePrinter ="doPDF v7"
Ws.PageSetup.PrintQuality = 96
Ws.PrintOut(Preview:=False)    '直接打印;    
App.Quit

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/24 11:59:00 [显示全部帖子]

如下图,我现在的默认打印机是用于通过文件监视器自动设别并打印刚刚通过DoPdf V7虚拟打印机转换后的PDF文件的;如果我将Dopdf v7设置成默认打印,那么就需要在文件监视器这里执行Print动作的时候要指定真实的打印机进行打印了 ;

在文件监视器里如何指定打印机进行打印呢?(其实在这里指定打印机也不方便,公司有很多打印机,分布在不同的楼层,指定直实的打印机也会比较麻烦;)


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

----文件监视器代码;
static ptime As Date = Nothing
Dim sp As TimeSpan = Date.now - ptime
ptime = Date.now
If sp.TotalMilliseconds < 2000  Then '间隔2000毫秒
    Return
End If

Dim Proc As New Process
Proc.File = e.FullPath
Proc.Verb = "Print" '指定动作
Proc.Start()
ShowAppWindow("Adobe Reader",4)
ShowAppWindow(e.Name,5)

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/24 14:03:00 [显示全部帖子]

不是设置默认打印机,而是怎么在文件管理器中指定使用非默认打印机打印?

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/24 15:02:00 [显示全部帖子]

难道Excle在显示的时候是OK,打印与打印预览时总会少几个字的问题,用程序自动解决就无解了吗?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:excel打印显示不全.xlsx



 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/24 16:41:00 [显示全部帖子]

.save("d:\aaa.wmf")语句在执行时报错“未将对象引用设置到对象的实例。”测试失败;


另外,这种方法与我转换成PDF的思路是一样的呀,我的整个打印过程分为两步

第一步:将Excel 利用Dopdf虚拟打印机自动转换成PDF格式文件,用于解决Excel内的文字打印不完整的情况;
第二步:再利用真实的打印机自动打印刚刚转换的PDF格式文件;

现在的问题,第一步我将Dopdf虚拟打印机设置成了默认打印机,但是第二次需要用真实打印机的时候就无法切换了;由于打印频率非常高,如果来回切换默认打印机,也将影响程序执行效率;现在就是卡在选择打印机上面了,怎么办?

-------以下代码为第一次打印————这里用虚拟打印机,每台电脑都会安装;
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.Cells
Rg.WrapText = True
Rg.EntireRow.AutoFit  '自动调整行高
wb.saved = True
Dim UsedRange As MSExcel.Range = ws.UsedRange
UsedRange.copy
ClipBoard.GetImage.save("d:\aaa.wmf")
App.DisplayAlerts = False
App.Visible = True
If rl.Contains("配料") Or rl.Contains("系统管理员") Then '
    Try
        Ws.PageSetup.PrintQuality = 96   ’如果打印机不支持96 Dpi时,此行会报错;
        Ws.PrintOut(Preview:=False,ActivePrinter: ="doPDF v7") '直接打印;
    Catch ex As Exception
        msgbox("目前系统设置的默认打印机不支持96 Dpi的打印质量,推荐使用DoPdf V7虚拟打印机")
    End Try
        
Else
    Return
End If

----文件监视器代码(这是第二次打印);——这里使用真实打印机,每台电脑对应的真实默认打印机会不同;
static ptime As Date = Nothing
Dim sp As TimeSpan = Date.now - ptime
ptime = Date.now
If sp.TotalMilliseconds < 2000  Then '间隔2000毫秒
    Return
End If

Dim Proc As New Process
Proc.File = e.FullPath
Proc.Verb = "Print" '指定动作
Proc.Start()
ShowAppWindow("Adobe Reader",4)
ShowAppWindow(e.Name,5)
[此贴子已经被作者于2018/10/24 16:57:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/24 17:27:00 [显示全部帖子]

如果在不把doPDF v7这个虚拟打印设置成默认打印机的话,用了app.PrintCommunication 方法,Ws.PageSetup.PrintQuality = 96代码虽然没有再报错,但是从打印效果上来看,这段代码等于没有执行,完全没启到作用;所以还是不行

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/24 19:52:00 [显示全部帖子]

没太理解以上的Fox循环的意思,是打算通过这个代码来指定转PDF的打印机吗?我在您的代码基础上,结合我的需要整合代码如下,执行以后Msgbox弹出的内容如下,显示的是我当前的默认打印机,最后Ws.PrintOut就直接打印到我的默认打印机上了;没有用我的Dopdf打印机转换Excle文件来解决打印字符不全的问题;


图片点击可在新窗口打开查看此主题相关图片如下:1111.jpg
图片点击可在新窗口打开查看

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.Cells
Rg.WrapText = True
Rg.EntireRow.AutoFit  '自动调整行高
wb.saved = True
App.DisplayAlerts = False
App.Visible = True
on error resume Next
Dim pname As String = "doPDF v7"
For i As Integer = 0 To 10
    app.activeprinter = pname & " 在 Ne" & Format(i, "00") & ":"
Next
msgbox(app.activeprinter)
If rl.Contains("配料") Or rl.Contains("系统管理员") Then '
    Ws.PageSetup.PrintQuality = 96   '如果打印机不支持96 Dpi时,此行会报错;
    Ws.PrintOut
Else
    Return
End If
App.Quit

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/25 9:07:00 [显示全部帖子]

弹出以下窗口


图片点击可在新窗口打开查看此主题相关图片如下:222.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
xvkewen
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2018/10/25 14:12:00 [显示全部帖子]

我把这段代码稍作修改了一下,app.activeprinter = pname & " 在 DOP7:"就解决问题了;非常感谢甜老师的耐心指导;也谢谢蓝老师的建议;

 回到顶部
总数 11 1 2 下一页