VB.NET打开并打印一个excel文件

我正在开发一个简单的VB.NET桌面应用程序的一点点印刷业务。 它有一个主要的WinForm,用于打开JPG / PDF / Word / Excel文件的button,打开相关程序,打印文件,捕获卷轴作业,最后根据打印机名称,打印页数,页面大小和每页成本。 没什么大不了。 主机有Win7操作系统。

当用户想要打印XLS文件时,我希望应用程序打开Excel 2010,打开以前用文件对话框select的文件。 当Excel打开时,直接进入打印对话框,然后当作业完成加载到spool中时,我捕获该事件并杀死Excel进程。

我的问题是:

我无法打开Excel直接进入打印对话框。 Excel能够响应“打印”动词。 但它只是用默认的打印机打印。 我想打开它并转到打印对话框。 我不想用默认打印机打印,我需要允许用户select所需的打印机,页面,副本等。

我试图用下面的代码来做到这一点:

Dim openFileDialog1 As New OpenFileDialog() Dim filePath As String = "" Dim startInfo As ProcessStartInfo 'openFileDialog1.InitialDirectory = "c:\" openFileDialog1.Filter = "XLS Files (*.xls)|*.xls|XLSX Files (*.xlsx)|*.xlsx|All files (*.*)|*.*" openFileDialog1.FilterIndex = 1 openFileDialog1.RestoreDirectory = True If (DialogResult.OK) = openFileDialog1.ShowDialog(Me) Then filePath = openFileDialog1.FileName Else Exit Sub End If startInfo = New ProcessStartinfo(rutaArchivo) With startInfo .FileName = filePath .WindowStyle = ProcessWindowStyle.Normal .Verb = "print" .CreateNoWindow = False .UseShellExecute = True End With Try System.Diagnostics.Process.Start(startInfo) Catch ex As Exception MsgBox(ex.ToString) End Try 

IDE是SharpDevelop 4.3。 框架是.NET 4.0客户端configuration文件。 操作系统是Win7的。

非常感谢 :)

MS Excel只有以下命令行开关: Excel开关

要做你想做的,你可以看看Excel Interop

您应该可以通过先打开打印对话框,然后使用以“PrintTo”这个动词select的打印机来做到这一点:

 Dim openFileDialog1 As New OpenFileDialog() Dim filePath As String = "" Dim startInfo As ProcessStartInfo 'openFileDialog1.InitialDirectory = "c:\" openFileDialog1.Filter = "XLS Files (*.xls)|*.xls|XLSX Files (*.xlsx)|*.xlsx|All files (*.*)|*.*" openFileDialog1.FilterIndex = 1 openFileDialog1.RestoreDirectory = True If (DialogResult.OK) = openFileDialog1.ShowDialog(Me) Then filePath = openFileDialog1.FileName Else Exit Sub End If Dim printer As String = "" Dim printDialog As New PrintDialog() If printDialog.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then printer = printDialog.PrinterSettings.PrinterName End If startInfo = New ProcessStartInfo(filePath) With startInfo .WindowStyle = ProcessWindowStyle.Normal .Verb = "PrintTo" '.Arguments = """\\" & System.Net.Dns.GetHostName() & "\" & printer & """" .Arguments = """" & printer & """" .CreateNoWindow = False .UseShellExecute = True End With Try System.Diagnostics.Process.Start(startInfo) Catch ex As Exception MsgBox(ex.ToString) End Try 

您可能必须在参数(注释行)中包含服务器。