2013-11-22 2 views
2

Я пытаюсь получить имя рабочей книги до ее фактического открытия.Извлечение названия книги Excel до ее фактического открытия

((Excel.AppEvents_Event)this.Application).WorkbookOpen += new Excel.AppEvents_WorkbookOpenEventHandler(App_WorkBookOpen); 



private void App_WorkBookOpen(Excel.Workbook Wb) 
      { 
       System.Windows.Forms.MessageBox.Show("Shakti " + " " + Wb.Name); 

      } 

С обработчиком, как показано выше, приложение Excel показывает имя рабочей книги, когда она будет открыта completely.My намерение это сделать некоторую формальную проверку, прежде чем она на самом деле открыта и данные отображаются пользователю.

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

+1

Вы можете скрыть книгу, прочитать имя, а затем закрыть или показать его по мере необходимости? –

+0

@SiddharthRout Rout: как мы спрячем книгу? есть ли какой-либо прямой способ сделать это? можете ли вы предоставить фрагмент кода? –

+0

http://stackoverflow.com/questions/11354456/hiding-active-workbook-programmatically-in-excel –

ответ

0

AFAIK вы не можете сделать это. Но, как я уже упоминал в своем комментарии, вы можете скрыть книгу в тот момент, когда она будет видна. Таким образом, пользователь увидит, что рабочая книга открыта на долю секунды, а затем станет невидимой. В течение этой секунды вы можете прочитать название рабочей книги, а затем скрыть книгу.

Основываясь на ваших расчетах/выводах, вы можете закрыть/показать рабочую книгу по мере необходимости.

Вы можете скрыть книгу с помощью

Wb.Windows[1].Visible = false; 
+0

Я бы отметил это как ответ, потому что это помогло мне в некоторой степени, но не полностью. Отображается все окно, содержащее рабочую книгу, и я перехватываю его, когда он открывается, а затем скрывает его.Я не могу найти какое-либо условие, чтобы оно не было видно, а затем запрашивать пользователя, если ему действительно нравится его открывать. Есть ли выход, который я могу запоздать загрузить окно книги? –

+0

'Есть ли выход из-за того, что у меня может быть поздняя загрузка окна книги?' Не то, что я знаю ... –

0

Нет, вы не можете.

Вы так или иначе могли бы создать макрос на УПРАЖНЕНИЯ модуль с открытым классом тегом, как здесь:

Private Sub Workbook_Open() 

Dim ws As Workbooks 

For Each ws In ActiveWorkbook.Worksheets 

MsgBox ws.Name 

Next 

ActiveWorkbook.Worksheets.Close 

End Sub 

Затем вызовите этот подпункт через C# при открытии файла, это суб работает до загрузки рабочей книги, то она закрывает его , Это не так, потому что вы больше никогда не получите доступ к wb ... Возможно, с некоторой настройкой здесь и там вы можете выполнить свою задачу, но это зависит от вас.

Надеется, что это помогает ...

+0

Это vsto :), а не только C# :) –

+0

@Mark: Мне интересно знать технически, что на самом деле происходит до его фактического открытия? –

0

Не Wb.name такой же, как имя файла? В этом случае, поскольку вы должны знать имя файла/место, чтобы открыть его, вы можете проверить его заранее?

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