Excel VSTO-шаблон PowerQuery - PullRequest
       4

Excel VSTO-шаблон PowerQuery

1 голос
/ 16 марта 2020

Итак, я создал проект Excel VSTO-Template, используя Visual Studio 2019. В этом проекте я хочу добавить PowerQuery (в пользовательском интерфейсе я создал Data -> New Blank Power Query -> Made the мне нужно), а затем я go в расширенном редакторе для просмотра запроса и c / c. Итак, у меня есть что-то вроде этого:

let
    Source = Json.Document(Web.Contents("http://localhost:53626/tables/invoice", [Headers=[#"ApiKey"=GetValue("ApiKey")]])),
#"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"dueDate", "invoiceDate", "paymentStatus", "paymentDate", "printDate", "lastRemindedDate", "lastRemindedLevel", "balance", "totalDue", "organizationNodeId", "internalNumber"}, {"dueDate", "invoiceDate", "paymentStatus", "paymentDate", "printDate", "lastRemindedDate", "lastRemindedLevel", "balance", "totalDue", "organizationNodeId", "internalNumber"}),
#"totalDue développé" = Table.ExpandRecordColumn(#"Column1 développé", "totalDue", {"incl", "excl", "vat"}, {"totalDue.incl", "totalDue.excl", "totalDue.vat"}),
#"Lignes filtrées" = Table.SelectRows(#"totalDue développé", each true)
in
#"Lignes filtrées"

Но теперь я хочу добавить это, используя код C#, но я не могу понять, как это сделать, вы можете помочь мне сделать это? Я знаю, что в книге есть свойство Connections, и мне нужно использовать Add2 для добавления соединения, но я не могу найти подсказки о том, как отформатировать параметры ConnectionString и CommandText

Спасибо

1 Ответ

0 голосов
/ 07 мая 2020

Поскольку я в основном сталкиваюсь с той же дилеммой, что и плакат, это единственный обходной путь, который я знаю на данный момент. Также нужно добавить COM-ссылку «Microsoft Visual Basi c для расширяемости приложений 5.3»

И это некрасиво:

var newStandardModule = ((Excel.Workbook)this.Application.ActiveWorkbook).VBProject.VBComponents.Add(Microsoft.Vbe.Interop.vbext_ComponentType.vbext_ct_StdModule);

var codeModule = newStandardModule.CodeModule;

// add vba code to module
var lineNum = codeModule.CountOfLines + 1;
var macroName = "addQuery";
var codeText = "Public Sub " + macroName + "()" + "\r\n";
// codeText += "  MsgBox \"Hi from Excel\"" + "\r\n";



var m_text = "\"let\" _\r\n";
m_text += "& vbCrLf & \"Source = Json.Document(Web.Contents(\"\"http://localhost:53626/tables/invoice\"\", [Headers =[#\"\"ApiKey\"\"=GetValue(\"\"ApiKey\"\")]])),\" _\r\n";
m_text += "& vbCrLf & \"#\"\"Converti en table\"\" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),\" _\r\n";
m_text += "& vbCrLf & \"#\"\"Column1 développé\"\" = Table.ExpandRecordColumn(#\"\"Converti en table\"\", \"\"Column1\"\", {\"\"dueDate\"\", \"\"invoiceDate\"\", \"\"paymentStatus\"\", \"\"paymentDate\"\", \"\"printDate\"\", \"\"lastRemindedDate\"\", \"\"lastRemindedLevel\"\", \"\"balance\"\", \"\"totalDue\"\", \"\"organizationNodeId\"\", \"\"internalNumber\"\"}, {\"\"dueDate\"\", \"\"invoiceDate\"\", \"\"paymentStatus\"\", \"\"paymentDate\"\", \"\"printDate\"\", \"\"lastRemindedDate\"\", \"\"lastRemindedLevel\"\", \"\"balance\"\", \"\"totalDue\"\", \"\"organizationNodeId\"\", \"\"internalNumber\"\"}),\" _\r\n";
m_text += "& vbCrLf & \"#\"\"totalDue développé\"\" = Table.ExpandRecordColumn(#\"\"Column1 développé\"\", \"\"totalDue\"\", {\"\"incl\"\", \"\"excl\"\", \"\"vat\"\"}, {\"\"totalDue.incl\"\", \"\"totalDue.excl\"\", \"\"totalDue.vat\"\"}),\" _\r\n";
m_text += "& vbCrLf & \"#\"\"Lignes filtrées\"\" = Table.SelectRows(#\"\"totalDue développé\"\", each true)\" _\r\n";
m_text += "& vbCrLf & \"in\" _\r\n";
m_text += "& vbCrLf & \"#\"\"Lignes filtrées\"\"\"";

codeText += "ActiveWorkbook.Queries.Add Name:=\"test\", Formula:=" + m_text + "\r\n";
codeText += "ActiveWorkbook.Connections.Add2 _\r\n";
codeText += "\"Query - test\", _\r\n";
codeText += "\"Connection to the 'test' query in the workbook.\", _\r\n";
codeText += "\"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=test;Extended Properties=\" _\r\n";
codeText += ", \"\"\"test\"\"\", 6, True, False\r\n";

codeText += "End Sub";

codeModule.InsertLines(lineNum, codeText);

var macro = string.Format("{0}.{1}", newStandardModule.Name, macroName);
this.Application.Run(macro);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...