2016-10-04 2 views
1

Скажем, откроется новый файл Excel, и в него будут введены данные. Может ли внешнее приложение C# подключиться к процессу Excel и получить данные от него? Кроме того, файл Excel никогда не сохраняется в файле.Можно ли импортировать данные из Excel через память?

Будет ли это трудно сделать, а также вы можете указать мне в правильном направлении, как это достичь.

+0

Вы хотите, чтобы приложение C# считывало то, что Excel хранит в памяти для определенного файла? Звучит как боль, если это возможно. –

+0

Нет, модели безопасности приложений в большинстве ОС не позволят этого! – Illuminati

+0

http://stackoverflow.com/questions/3746409/how-to-read-some-data-from-a-windows-application-memory, возможно, полезно – Hozikimaru

ответ

0

Просто добавьте этот код в код позади приложения формы Windows, на котором есть кнопка с именем «button1». Этот примерный код будет проходить через ячейки файла Excel и отображать содержимое каждой ячейки в окне сообщений. Конечно, требуется ссылка на проект «Microsoft.Office.Interop.Excel».

И не забудьте создать файл excel, в этом примере я использовал этот путь «C: \ ExcelData \ DataToImp.xlsx».

using Excel = Microsoft.Office.Interop.Excel; 


    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     Excel.Range range; 

     string str; 
     int rCnt = 0; 
     int cCnt = 0; 

     xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Open("C:\\ExcelData\\DataToImp.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     range = xlWorkSheet.UsedRange; 

     for (int rowIndex = 1; rowIndex <= range.Rows.Count; rowIndex++) 
     { 
      for (int columnIndex = 1; columnIndex <= range.Columns.Count; columnIndex++) 
      { 
       Excel.Range rangeTest = range.Cells[rowIndex, columnIndex] as Excel.Range; 

       if (rangeTest.MergeCells)// && rangeTest.Value2 == null) 
       { 
        //continue; 

        int columns = rangeTest.Columns.Count; 
        columnIndex += columns; 
       } 

       MessageBox.Show("m " + (string)rangeTest.Value2); 

      } 
     } 

     xlWorkBook.Close(true, null, null); 
     xlApp.Quit(); 

     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkBook); 
     releaseObject(xlApp); 
    } 

    private void releaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception ex) 
     { 
      obj = null; 
      MessageBox.Show("Unable to release the Object " + ex.ToString()); 
     } 
     finally 
     { 
      GC.Collect(); 
     } 
    } 
+1

Это было мое первое, хотя тоже. Предостережение для OP заключается в том, что нет, вы не можете взять уже открытый Excel и «подключиться» к нему таким образом, вы должны сначала запустить свою программу, которая сама откроет Excel, и оттуда вы сможете читать все типы людей внутрь. – Quantic

+1

Да, это способ сделать это, и файл должен быть «сохранен» на диске после внесения некоторых изменений данных в Excel. – Clock

+1

Также не нужно, чтобы приложение «открывало» Excel, оно просто читает файл. Нет необходимости открывать Excel для этого. – Clock