2015-12-01 1 views
22

Я использую Excel Interop, чтобы открыть файл xlsx и сохранить его как документ PDF. После вызова метода ExportAsFixedFileFormat отображается диалоговое окно «Публикация» для указания прогресса. Как я могу подавить или скрыть этот диалог? Я видел несколько подобных вопросов на других форумах без удовлетворительного решения, но, надеюсь, кто-то решил это с тех пор.C# Excel Interop - запретить диалог «Публикация» при вызове Worksheet.ExportAsFixedFormat

enter image description here

Код:

Application application = new Application(); 
application.DisplayAlerts = false; // <- No effect 
application.Visible = false; // <- No effect 
application.ScreenUpdating = false; // <- No effect 
application.UserControl = false; // <- No effect 
application.Workbooks.Open(path, Type.Missing, true); 
application.DisplayDocumentActionTaskPane = false; // <- No effect 
application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path); 
+0

Эта награда не может помочь никому. Кажется, что это зависит от ОС и Excel-версии, так как на моей машине (Win 10 + Office 2013) не появляется ни одного диалогового окна – lokusking

+0

Вы просто не можете. Такие диалоги прогресса появляются, когда Excel понимает, что выполняемая операция займет много времени. Даже если вы сохраните книгу «CTRL + S», а пункт назначения - сетевой диск с медленной сетью, вы увидите диалог прогресса. Его главным образом потому, что вы либо публикуете много данных, либо ваша система связана с ресурсами или вы публикуете на сетевом диске, который медленный или все из них. – cyboashu

+3

Немногие способы сделать это с помощью WinAPI, чтобы найти это диалоговое окно и установить видимость на скрытое, или если вы заинтересованы в том, чтобы пользователь отменил эту операцию, затем снова используйте WinAPI для блокировки ввода клавиатуры мыши во время публикации. – cyboashu

ответ

0

Как насчет его обработки на BackgroundWorker. Это не будет бросать COMEXCEPTION. Я пробовал этот код нажатием кнопки, и он работает без отображения progress dialog.

var worker = new BackgroundWorker(); 
worker.DoWork += (o, args) => 
{ 
    var path = @"D:\sample.xlsx"; 
    var application = new Microsoft.Office.Interop.Excel.Application(); 
    application.Workbooks.Open(path, 
     Type.Missing, true); 
    application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path); 
}; 
worker.RunWorkerAsync(); 
1

Возможно, я не отвечаю на ваш вопрос, но я постараюсь быть полезным. Насколько мне известно, не рекомендуется использовать Excel Interop во внутренней обработке. Вы столкнулись с одной из своих проблем, но есть и другие. Существуют сторонние альтернативы для взаимодействия с форматами Excel, некоторые из них - с открытым исходным кодом, а некоторые - коммерческие. Я бы настоятельно рекомендовал взглянуть на один из них: и NPOI. Оба являются открытыми и бесплатными.

0

Вы можете использовать библиотеку педамора, pedamorf - это сервер, который преобразует документы, изображения, URL-адреса, html и текст в PDF. Он в значительной степени опирается на отличные программы с открытым исходным кодом wkhtml2pdf, Libre Office и iTextSharp. Клиентская библиотека предоставляется и может использоваться из приложения .NET для использования услуг преобразования, предоставляемых pedamorf.

Подробнее является here

0

Безусловно лучшего API для обработки (создание, чтение, экспорт в PDF/HTML, и т.д ...) XLS/XLSX файлы, которые я знаю, это FLEXCEL. Это действительно простой, невероятно быстрый и полный сценарий на C#. Не требуется установка Excel.

Вы найдете здесь: http://www.tmssoftware.com/site/flexcelnet.asp (получить пробную версию с большим количеством примеров с исходным кодом)

Если у вас есть бюджет в проекте, чтобы получить лицензию, я действительно рекомендую.

+0

Используйте NuGet и ищите EPPlus. Это на сегодняшний день (в моем HO) BEST API для генерации содержимого Excel в Интернете. – Dotnettex

 Смежные вопросы

  • Нет связанных вопросов^_^