Автоматизация Excel 2010 с использованием F # - PullRequest
5 голосов
/ 22 января 2011

Я искал FAQ, чтобы рассказать мне, как открыть книгу / рабочий лист Excel, а также как сохранить файл, когда я закончу.

Я заметил, что в большинстве FAQ и во всех книгах яВы приобрели на F # один - показать, как создать новую рабочую книгу / рабочую таблицу, но никогда не показывают, как ее открыть или сохранить.

Будучи новичком в F #, я был бы очень признателен, если бы кто-то мог предоставить мнес ответом или, возможно, с несколькими указателями?

Обновление

А почему F #, а не C # или VB?

Я рад сказать, чточто, несмотря на то, что я новичок (за исключением Forth, VBA & Excel 2003, 2007 и 2010 и Visual Basic), я могу делать это как в VB, VBA & C #, так как я вышел на пенсию по медицинским показаниям, с большим количествомвремя, к сожалению, в моих руках, я люблю постоянно ставить перед собой задачи, чтобы мои маленькие серые ячейки были активными и были пристрастны к освоению новых языков ... хорошо!

F # теперь является неотъемлемой частью Visual Stuдио 2010 так я и подумал - а почему бы и нет.Подумайте об этом - если мы не хотим использовать или, по крайней мере, пробовать новые языки - мне всегда было бы интересно, если бы я предпочел это VBA, VB, C # ..... и если вы посмотрите на это с другой точки зрениявид, если никто не собирается его использовать - зачем создавать его в первую очередь?Я полагаю, вы можете сказать, что если бы пещерные люди не экспериментировали и не подожгли, потерев две палки - где бы мы были сейчас и были бы изобретены спички?

Хотя полный ответ был бы хорош, я предпочитаюнесколько указателей, чтобы сохранить мой вызов.

И, наконец, что не менее важно - спасибо, что потрудились ответить!

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Я не думаю, что это специфическая библиотека F # для Office, поэтому вы просто будете использовать ту же библиотеку .NET, которую вы используете в VB.NET/C#. F # - это язык .NET, поэтому все, что можно сделать в C #, можно сделать в F # (но вы, вероятно, уже знали об этом :)). Вызов API будет точно таким же, просто они будут выполняться с использованием синтаксиса F # вместо VB / C #. Так, например, что-то похожее на это

public void SaveMyWorkbook() {
    string filePath = @"C:\failworkbooks\catfail.xlsx";
    workbook.Save(filepath);
}

Будет выражаться в F # как

let filePath = "C:\\failworkbooks\\catfail.xlsx";

let saveWorkbook() = workbook.Save(filePath) |> ignore //if the Save method return something

Теперь вы скоро поймете, что API не совсем разработан для того, чтобы его можно было легко использовать из функционального языка. Это можно сделать, но эта задача, в частности, гораздо более приспособлена к C # / VB.NET.

Если вы действительно хотите насладиться F #, я предлагаю вам использовать в области, где его сила действительно проявляется. Мой личный опыт показывает, что функциональный язык просто великолепен, когда в него вовлечено много математики. Это также замечательно, если вы хотите легко ввести параллелизм в вашем приложении (поскольку код F # обычно не имеет побочных эффектов). Поэтому все, что требует обработки большого количества данных, идеально подходит для этого. Но для задачи, которая состоит в основном из объединения вызовов API во внешнюю библиотеку, F # - своего рода ме. Можно сказать, что F # подобен языку программирования для графических карт, а C # - язык программирования ЦП общего назначения. Многое работает лучше с C #, но то, что лучше работает на F #, работает действительно лучше на нем.

Но если вы действительно хотите пойти по этому пути, я предлагаю попробовать использовать API-интерфейс Office, как вы уже знаете, но с синтаксисом F #. Если в какой-то момент вы действительно не знаете, как выполнить специфическую задачу, задайте вопрос об этом в stackoverflow с вашим кодом и точно хотите, чтобы вы хотели это сделать. На этот вопрос смехотворно быстро отвечают по сравнению с широким всеобъемлющим вопросом, так что вы не будете долго ждать. (Программист, кажется, любит точный вопрос с конкретным ответом ^^)

Надеюсь, это немного помогло.

1 голос
/ 10 мая 2016

Я нашел этот http://iouri -khramtsov.blogspot.co.uk / 2011/12 / automating-excel-with-f.html полезный совет. Вкратце, вы бы использовали что-то вроде этого:

#r "Microsoft.Office.Interop.Excel"  // Assuming it's a script

let excel = ApplicationClass(Visible = true)

let openFileName = @"C:\MyDir\MyFilenameToOpen.xls"
excel.Workbooks.Open(openFileName)

// Do stuff

let savedFileName = @"C:\MyDir\MyFilename.xls"
workbook.SaveAs(savedFileName)

Использование F # в Excel кажется естественным.

Чтобы получить результат в Excel, необходимо использовать несколько неизменных значений, каждое из которых определяется формулами. Excel имеет блестящий пользовательский интерфейс, прекрасную модель мира - я люблю строки, столбцы и ячейки - но для автоматизации или настройки вещей требуются макросы. Зачем изучать это, когда вы можете использовать F #? Формулы и неизменные значения имеют основополагающее значение для его дизайна.

В идеале вы должны писать формулы самостоятельно как пользовательскую функцию (UDF) также в F # - см. http://excel -dna.net / . Тогда, возможно, вы захотите сделать что-то интересное с объектами / типами - найдите «github com mndrake ExcelObjectHandler» (у меня недостаточно репутации, чтобы опубликовать третью ссылку).

Jack

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