Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Запуск различных версий MS Excel в C#


Автор: allx2010 24.5.2010, 20:16
Доброго времени суток.
У меня следующий вопрос:
Было:
На машине стоял 2003 офис

строка кода из приведенного ниже примера
Код

_app = new ApplicationClass();

запускала 2003 эксель. Все работало как было нужно.

Стало:
Рядом с 2003 офисом поставился 2007 офис

строка кода из примера
Код

_app = new ApplicationClass();

стала запускать 2007 эксель.

Нужно: В данном частном случае, чтобы  запускался 2003 эксель, а в общем - возможность запуска любого из установленных на машине экселей  с помощью класса Microsoft.Office.Interop.Excel.Application.



Код

using System;
using Microsoft.Office.Interop.Excel;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      Microsoft.Office.Interop.Excel.Application _app;
      _app = new ApplicationClass();
      //Работаем 
      //....
      //Закрываем
      _app.Quit();
      System.Runtime.InteropServices.Marshal.ReleaseComObject(_app);
      GC.GetTotalMemory(true);
    }
  }
}


Автор: Выхухоль 25.5.2010, 08:19
Кажется вы ерундой занимаетесь...но все таки:
Код

   1. public void OpenExcelFile(bool isOpenXMLFormat)  
   2. {  
   3.     //open the excel file using OLEDB  
   4.     OleDbConnection con;  
   5.   
   6.     if (isOpenXMLFormat)  
   7.         //read a 2007 file  
   8.         connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +  
   9.             fileName + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";  
  10.     else  
  11.         //read a 97-2003 file  
  12.         connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  
  13.             fileName + ";Extended Properties=Excel 8.0;";  
  14.   
  15.     con = new OleDbConnection(connectionString);  
  16.     con.Open();  
  17.   
  18.     //get all the available sheets  
  19.     System.Data.DataTable dataSet = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
  20.   
  21.     //get the number of sheets in the file  
  22.     workSheetNames = new String[dataSet.Rows.Count];  
  23.     int i = 0;  
  24.     foreach (DataRow row in dataSet.Rows)  
  25.     {  
  26.         //insert the sheet's name in the current element of the array  
  27.         //and remove the $ sign at the end  
  28.         workSheetNames[i] = row["TABLE_NAME"].ToString().Trim(new[] { '$' });  
  29.         i++;  
  30.     }  
  31.   
  32.     if (con != null)  
  33.     {  
  34.         con.Close();  
  35.         con.Dispose();  
  36.     }  
  37.   
  38.     if (dataSet != null)  
  39.         dataSet.Dispose();  
  40. }  


Добавлено через 9 минут и 35 секунд
Сори ошибся, это я вам скинул код чтения из разных типов файлов. 

Для запуска используйте разные версии библиотеки 

Код

Microsoft.Office.Interop.Excel;

Для 2007 это 12
для 2003 это 11

но вам придется использовать либо ту либо другую...вместе тяжко очень...

Автор: jonie 25.5.2010, 20:21
Цитата

но вам придется использовать либо ту либо другую...вместе тяжко очень... 
можно самому сгенерировать с ключем /namespace и вполне себе использовать.
А можно использовать IDisposable через ключевое слово dynamic (появилось в C#v4), создавая экземпляры экселя указывая версионно-зависимый prodID...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)