Kiran_Desai Ответов: 3

Как интегрировать excel в приложение C# windows без использования веб-браузера?


Required scenarios are

1. Excel should be open inside application.
2. Excel has some formulas/micro, that should work as expected.
3. Rows are pragmatically added and removed from excel.


Что я уже пробовал:

[DllImport("user32.dll")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);


excelApp = new Microsoft.Office.Interop.Excel.Application();
Process p = Process.Start("excel.exe");
Thread.Sleep(1000); // Allow the process to open it's window
SetParent(p.MainWindowHandle, this.panel1.Handle);

3 Ответов

Рейтинг:
2

#realJSOP

Если вам нужна электронная таблица в вашем приложении, есть несколько библиотек, которые вы можете использовать, но если вы хотите гарантировать совместимость с формулами и макросами Excel, вам придется потратить деньги. Telerik, Infragistics, DevExpress и SpreadsheetGear-все это жизнеспособные варианты, но все они стоят денег.

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

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


Kiran_Desai

Я использую C# WinForms и хочу отобразить содержимое файла excel на одной панели.

Рейтинг:
10

Kiran_Desai

[DllImport("user32.dll")]
   static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);



   Microsoft.Office.Interop.Excel.Application excelApp;
   Workbook excelWorkBook;
   Worksheet excelWorkSheet;

  // Excel file opened inside panel control on button click event.

   private void btnLoadExcelParent_Click(object sender, EventArgs e)
   {
       excelApp = new Microsoft.Office.Interop.Excel.Application();

       excelApp.Visible = true;
       excelApp.ScreenUpdating = true;
       excelApp.EnableAutoComplete = false;
       object misValue = System.Reflection.Missing.Value;
       excelWorkBook = excelApp.Workbooks.Add(misValue);
       IntPtr excelHwnd = new IntPtr(excelApp.Application.Hwnd);
       SetParent(excelHwnd, panel1.Handle);

   }



Я достигаю этой функциональности с помощью приведенного выше кода.


Рейтинг:
0

Nathan Minier

Есть несколько библиотек, которые могут вам помочь.

Один из них-Microsoft.Офис.Библиотека взаимодействия. Слабость этой библиотеки заключается в том, что она требует установки Excel на той же машине, на которой выполняется.

Другой вариант-OpenXML. Он сложнее в использовании, но будет работать везде.

Я собираюсь предложить ответвление OpenXML: ClosedXML.

Галерея NuGet | ClosedXML 0.94.2[^]