@sqliteman
Гейм-дизайнер

Как отправить файл .xlsx на печать лежащий возле exeШника программы c#?

В общем есть файл пусть test.xlsx и его нужно по нажатию кнопки в программе отправить на печать (чтоб появился выбор принтера и тд)
Использую библиотеку spreadsheetlight для генерации документа (а в идеале и печатать бы через нее), но для печати можно и вот так Microsoft.Office.Interop.Excel
Как это можно сделать?
  • Вопрос задан
  • 747 просмотров
Пригласить эксперта
Ответы на вопрос 1
pilartser
@pilartser
Выдрал из своего старого консольного проектика, написанного впопыхах.

internal static string SelectPrinter()
        {
            System.Windows.Forms.PrintDialog prntDlg = new System.Windows.Forms.PrintDialog();
            if (prntDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                if (prntDlg.PrinterSettings.IsValid)
                    return prntDlg.PrinterSettings.PrinterName;
            }
            return "";
        }

        internal static string GetPort(string printerName)
        {
            var devices = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Devices"); //Read-accessible even when using a locked-down account
            try
            {

                foreach (string name in devices.GetValueNames())
                {
                    if (name == printerName)
                    {
                        var value = (String)devices.GetValue(name);  
                        var port = Regex.Match(value, @"(,\w+:)", RegexOptions.IgnoreCase).Value;
                        port = port.Replace(",", "");
                        return port;
                    }
                }
            }
            catch
            {
                throw;
            }
            return "";
        }

        internal static string GetActivePrinter()
        {
            string printer = SelectPrinter();
            if (printer != "")
            {
                string port = GetPort(printer);
                if (port != "")
                    return printer + " (" + port + ")";
                else
                    return "";
            }
            else
                return "";
        }

        internal static void PrintExcelSheet(Excel.Application app, Excel.Worksheet sheet, String activePrinter)
        {
            try
            {
                app.ActivePrinter = activePrinter;
                sheet.PrintOutEx();
            }
            catch (Exception e)
            {
                Console.WriteLine("Print error:\r\n" + e.Message);
            }
        }


Ну и вызов
string printerName = GetActivePrinter();
if (printerName != "")
{
   Console.WriteLine("Menu send to printer: " + printerName);
   PrintExcelSheet(xlApp, xlWorkSheet, printerName);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы