#c# #.net #vba #excel-interop
#c# #.net #vba #excel-interop
Вопрос:
Я написал некоторый VBA, который перебирает запросы PowerQuery в рабочей книге и экспортирует формулу M в отдельные файлы, и мне пришла в голову глупая идея написать дополнение Excel для этого вместо того, чтобы вставлять его во все рабочие книги, которые могут в нем нуждаться. Проблема в том, что коллекция запросов рабочей книги недоступна в interop.excel, а коллекция таблиц запросов не возвращает формулу M. Кто-нибудь знает, как я могу получить доступ к коллекции запросов рабочей книги, если не добавлять приведенный ниже VBA и запускать его программно?
For Each qry In ThisWorkbook.Queries
filepath = directory amp; qry.Name amp; ".txt"
Set filestream = fso.CreateTextFile(filepath, True)
arr = Split(qry.Formula, Chr$(10))
For i = LBound(arr, 1) To UBound(arr, 1)
filestream.WriteLine (arr(i))
Next i
filestream.Close
Next qry
Редактировать: для некоторых разъяснений вот как выглядит c # (с использованием Excel = Microsoft.Офис.Взаимодействие.Excel). Проблема в том, что я не могу сделать что-то вроде foreach(Excel.WorkbookQuery qry в wkbk.Запросы) {} здесь
void Application_WorkbookAfterSave(Excel.Workbook wkbk, bool suc)
{
string wkbk_name = Path.GetFileNameWithoutExtension(wkbk.Name);
string wkbk_path = wkbk.Path "\" wkbk_name;
DialogResult save_res = MessageBox.Show("Do you want to save scripts?", wkbk_name, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if(save_res == DialogResult.Yes)
{
if(!Directory.Exists(wkbk_path))
{
Directory.CreateDirectory(wkbk_path);
}
}
}
Комментарии:
1.
ThisWorkbook
так же легко может бытьActiveWorkbook
, и вы можете написать свою надстройку как xlam…2. Проблема заключается не в идентификации объекта рабочей книги, а в коллекции запросов рабочей книги. VBA допускает <объект рабочей книги>.запросы, в то время как interop.excel, похоже, не является проблемой.
3. Я только предложил вам рассмотреть возможность использования VBA для вашей надстройки вместо C #, если это не предлагает все необходимые вам интерфейсы
4. ..или, может быть, попробуйте использовать позднюю привязку и посмотреть, сможете ли вы получить доступ к свойству запросов: xspdf.com/questions/41914.shtml