c # impostazione di una stampante

Ciao e grazie per il tuo tempo su questa domanda, sto provando a cambiare una stampante triggers in base alla scelta che l’utente sceglie in Excel. Comunque sto avendo qualche problema. Per qualche ragione continua a darmi lo stesso errore.

“Un’eccezione di tipo ‘System.Runtime.InteropServices.COM Exception’ si è verificata in DailyReport.dll ma non è stata gestita nel codice utente Eccezione da HRESULT: 0X800A03EC”

Ho riscontrato questo errore e ho avuto difficoltà a trovare nulla, ho trovato un link COM Exception e hanno fornito un link a un altro sito ma sembra che quando provo ad andare quel sito non si apre.

Ho provato:

xlApp.ActivePrinter = "CORPPRT58-Copier Room on RR-PS1:"; xlApp.ActivePrinter = "\\RR-PS1\CORPPRT58-Copier Room"; xlApp.ActivePrinter = "CORPPRT58-Copier Room on RR-PS1"; 

Ho controllato per assicurarsi che la stampante sia installata ed è così. se qualcuno potesse indicarmi la direzione corretta sarebbe fantastico grazie !!

La risposta corretta è (cioè):

 xlApp.ActivePrinter = "\\\\RR-PS1\\CORPPRT58-Copier Room on Ne00:"; 

Una parte importante è la ‘Ne00:’ Questa è la porta su cui è ansible trovare questa stampante. Questo è diverso su ogni computer e può essere trovato nel registro HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices .

Un altro problema è la stringa di concatenazione ‘on’. Questo può essere valido quando si lavora con un inglese excel ma è tradotto in altre lingue!

Ho avuto lo stesso problema, ma non ci sono molti esempi completi che ho trovato, ecco il mio:

 // Open excel document var path = @"c:\path\to\my\doc.xlsx"; Microsoft.Office.Interop.Excel.Application _xlApp; Microsoft.Office.Interop.Excel.Workbook _xlBook; _xlApp = new Microsoft.Office.Interop.Excel.Application(); _xlBook = _xlApp.Workbooks.Open(path); _xlBook.Activate(); var printer = @"EPSON LQ-690 ESC/P2"; var port = String.Empty; // Find correct printerport using (RegistryKey key = Registry.CurrentUser.OpenSubKey(path)) { if (key != null) { object value = key.GetValue(printer); if (value != null) { string[] values = value.ToString().Split(','); if (values.Length >= 2) port = values[1]; } } } // Set ActivePrinter if not already set if (!_xlApp.ActivePrinter.StartsWith(printer)) { // Get current concatenation string ('on' in enlgish, 'op' in dutch, etc..) var split = _xlApp.ActivePrinter.Split(' '); if (split.Length >= 3) { _xlApp.ActivePrinter = String.Format("{0} {1} {2}", printer, split[split.Length - 2], port); } } // Print document _xlBook.PrintOutEx(); 

È tutt’altro che perfetto dato che non sono a conoscenza di altre traduzioni. Se ‘on’ è tradotto con spazi, sopra fallirà. Ma immagino che la soluzione funzionerà per la maggior parte dei clienti. È ansible ottenere facilmente la stringa di concatenazione corrente osservando il valore di currer di ActivePrinter.

Un metodo più a prova di errore consisterebbe nello spogliare il nome della stampante e la porta assegnata e ciò che rimane è la stringa di concatenazione. Ma poi dovresti eseguire il ciclo di tutte le stampanti installate e verificare la corrispondenza.

Un altro test che faccio personalmente controlla se la stampante è installata sul sistema:

 if(PrinterSettings.InstalledPrinters.Cast().ToList().Contains(printer)) { //Set active printer... }