Рабочий лист Excel Изменение текущего листа C # - PullRequest
2 голосов
/ 19 сентября 2011

В любом случае вы можете изменить уже открытый рабочий лист в Excel. Их страница MSDN дает вам то, что ниже. Это добавляет новую рабочую книгу и рабочий лист каждый раз. У меня есть код открытия и существующий лист, и я просто хочу, чтобы он заменил значение в ячейке и закрытие. Любая помощь с благодарностью.

using Excel = Microsoft.Office.Interop.Excel; //Excel Reference

 public virtual Object ActiveSheet { get; set; }

 private void button15_Click(object sender, EventArgs e)//Generate Model and Part Numbers
    {
        Excel.Application oXL;
        Excel._Workbook oWB;
        Excel._Worksheet oSheet;

        //Start Excel and get Application object.
        oXL = new Excel.Application();
        oXL.Visible = true;

        //Get a new workbook.
        oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
        oSheet = (Excel._Worksheet)oWB.ActiveSheet;  
        oSheet.Cells[6, 4] = "0"; //Change Value in Cell in Excel Cell Location [y-axis, x-axis]
     }

Ответы [ 4 ]

3 голосов
/ 19 сентября 2011

вы можете перебрать oXL.Workbooks для доступа к текущим открытым рабочим книгам ... текущая активная рабочая книга доступна через oXl.ActiveWorkbook.

РЕДАКТИРОВАТЬ - согласно комментарию:

Либо используйте oXL.Windows, чтобы найти уже открытое окно, и наберите Activate, прежде чем получить доступ к ActiveWorkbook, либо просто наберите oXL.ActiveWindow.Close() или oXL.ActiveWindow.ActivatePrevious(), чтобы получить уже открытое окно ...

РЕДАКТИРОВАТЬ 2 - согласно комментарию заключительная часть решения:

использовать

oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
2 голосов
/ 20 сентября 2011

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

 using Excel = Microsoft.Office.Interop.Excel; //Excel Reference   

  public virtual Object ActiveSheet { get; set; }   

  private void button15_Click(object sender, EventArgs e)//Generate Model and Part Numbers   
  {   
        //Gets ActiveSheet to Modify
        Excel.Application oXL;
        Excel.Workbook oWB;
        Excel.Worksheet oSheet;

        //Start Excel and get Active Workbook and Sheet to modify
        oXL = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
        oXL.Visible = true;
        oWB = (Excel.Workbook)oXL.ActiveWorkbook; 
        oSheet = (Excel.Worksheet)oWB.ActiveSheet;   

        //Cell Input
        oSheet.Cells[6, 4] = "0"; //Change Value in Cell in Excel Cell Location [y-axis, x-axis] 
   }   
0 голосов
/ 19 сентября 2011

Может быть проще отказаться от Interop Classes и использовать OLEDB для запуска запроса на обновление листа. Я могу привести примеры, если вам интересно.

0 голосов
/ 19 сентября 2011

Если вы откроете, как показано ниже, вы создадите просто новый экземпляр.oXL = new Excel.Application ();

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

Если вы хотите открыть активный лист, который открывается не вашим приложением, проверьте здесь: Получитьэкземпляр приложения Excel с C # от Handle

все остальное одинаково:

oSheet = (Excel._Worksheet)oWB.ActiveSheet; 

, если вы хотите иметь доступ к рабочему листу, который вы открываете с помощью экземпляра c # затем :(.net framework 4)

using Excel;

    Excel.Application oXl = new Excel.Application();
    Workbook oWb = oxl.workbooks.add();
    Worksheet oWs = oWs.Worksheets(1); //As default excel will open 3 worksheet and active worksheet will be first one.

Редактировать: Я не проверял, что блок кода может быть ошибкой ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...