VB.NET открыть и распечатать файл Excel

Я разрабатываю простое настольное приложение VB.NET для небольшого полиграфического бизнеса. Он имеет основную WinForm, кнопки для открытия файлов JPG / PDF / Word / Excel, открытия связанной программы, печати файла, захвата задания спула и, наконец, взимания платы с пользователя за то, что печатается, в зависимости от имени принтера и количества страниц. , размер страниц и стоимость страницы. Ничего страшного. На хост-машинах установлена ​​ОС Win7.

Когда затем пользователь хочет распечатать файл XLS, я хочу, чтобы приложение открывало Excel 2010, открывая файл, ранее выбранный в диалоговом окне файла. И когда открывается Excel, переходите непосредственно к диалоговому окну печати, а затем, когда задание загружается в спул, я фиксирую это событие и УБИВАЮ процесс Excel.

Моя проблема:

Я не могу открыть Excel прямо в диалоговом окне печати. Excel ДЕЙСТВИТЕЛЬНО реагирует на команду «печать». Но он просто печатает на принтере по умолчанию. Я хочу, чтобы он открылся и перешел в диалог печати. Я не хочу просто печатать на принтере по умолчанию, мне нужно разрешить пользователю выбирать нужный принтер, страницы, копии и т. Д.

Я пытаюсь сделать это с помощью следующего кода:

   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. Framework - это клиентский профиль .NET 4.0. ОС - Win7.

Большое спасибо :)


person Leandro Alsina    schedule 24.09.2013    source источник


Ответы (2)


В MS Excel есть только следующие переключатели командной строки: Переключатели Excel

Чтобы сделать то, что вы хотите, вы можете заглянуть в Excel Interop

person Steve    schedule 24.09.2013

Вы должны иметь возможность сделать это, сначала открыв диалоговое окно печати, а затем используя принтер, выбранный с помощью команды «PrintTo», например:

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

Возможно, вам придется включить сервер в аргументы (строка комментария).

person DSway    schedule 24.09.2013