2013-09-06 3 views
1

Я пытаюсь распечатать лист Excel (2003) программно с помощью C#. Вероятно, есть какая-то ссылка, которую мне нужно добавить, но после некоторых поисков, даже с несколькими предложенными ссылками, я не могу понять, какой код использовать, потому что все, что я пробовал, по какой-то причине не работает, поэтому я даже не есть какой-нибудь пример кода для публикации, чтобы показать, что у меня есть до сих пор. Я вообще понятия не имею, как заставить мою программу печатать выбранный лист Excel, поэтому любая помощь будет отличной.Печать листа Excel 2003 с использованием C#

Заранее спасибо.

+0

Взгляните на: http://stackoverflow.com/questions/10900565/excel-interop-print –

+0

Я не уверен на 100%, если это будет сделано, что я хочу, но в любом случае, что я установил xlexcel и xlWorkBook? Я получаю, что я бы установил xlWorkSheet в имя рабочего листа и xlRange для диапазона ячеек, которые я хочу напечатать, и, возможно, установил xlWorkBook на путь моей книги, но я не уверен, что делать для xlexcel. –

ответ

1

Так в основном лучший способ я понял, чтобы сделать это с помощью Microsoft.Office.Interop.Excel

object misValue = System.Reflection.Missing.Value; 

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbook wb = excelApp.Workbooks.Open(Form1.excelPath, misValue, misValue, misValue, 
    misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); 
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1]; 

//bring about print dialogue 
bool userDidntCancel = excelApp.Dialogs[Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogPrint].Show(misValue, 
    misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, 
    misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, 
    misValue, misValue, misValue, misValue, misValue); 

userDidntCancel приводит к коробке печати диалога и будет возвращать истинным или ложным, указывающее, нажата ли пользователь «PRINT» или «CANCEL» в диалоговом окне печати, которое вы можете использовать или нет. Я предпочел этот метод, потому что он позволяет пользователю изменять принтеры и другие свойства, и, на мой взгляд, это намного лучше.

Единственная проблема, с которой я столкнулся, заключается в том, что она печатает, что когда-либо лист был вручную открыт и сохранен вручную. Например, в моем случае моя программа вносит некоторые изменения в рабочий лист, а затем сохраняет его. Однако, если пользователь вручную открыл рабочий лист вне программы и сохранил что-то на другом листе, моя программа напечатает этот рабочий лист вместо того, который он только что редактировал. Я не могу понять, как это исправить, поэтому, если у кого-то есть предложения, не стесняйтесь комментировать.