Remkomplekty.ru

IT Новости из мира ПК
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Visual c excel

Работа с Excel с помощью C# (Microsoft.Office.Interop.Excel)

Оставляю заметку по работе с Excel с помощью C#.

Привожу фрагменты кода, которые искал когда-то сам для работы с Excel документами.

Наработки очень пригодились в работе для формирования отчетности.

Прежде всего нужно подключить библиотеку Microsoft.Office.Interop.Excel.

Visual Studio здесь довольно старой версии. Если у вас версия новая, отличаться будет только вид окна.

Далее создаем псевдоним для работы с Excel:

using Excel = Microsoft.Office.Interop.Excel;

Расстановка рамок.

Расставляем рамки со всех сторон:

Цвет рамки можно установить так:

Выравнивания в диапазоне задаются так:

Формулы

Определим задачу: получить сумму диапазона ячеек A4:A10.

Для начала снова получим диапазон ячеек:

Excel.Range formulaRange = sheet.get_Range(sheet.Cells[4, 1], sheet.Cells[9, 1]);

Далее получим диапазон вида A4:A10 по адресу ячейки ( [4,1]; [9;1] ) описанному выше:

string adder = formulaRange.get_Address(1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);

Теперь в переменной adder у нас хранится строковое значение диапазона ( [4,1]; [9;1] ), то есть A4:A10.

Выделение ячейки или диапазона ячеек

Так же можно выделить ячейку или диапазон, как если бы мы выделили их мышкой:

Авто ширина и авто высота

Чтобы настроить авто ширину и высоту для диапазона, используем такие команды:

Получаем значения из ячеек

Чтобы получить значение из ячейки, используем такой код:

Добавляем лист в рабочую книгу

Чтобы добавить лист и дать ему заголовок, используем следующее:

Добавление разрыва страницы

Сохраняем документ

Как открыть существующий документ Excel

Комментарии

При работе с Excel с помощью C# большую помощь может оказать редактор Visual Basic, встроенный в Excel.

Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.

Далее заходим в редактор Visual Basic и смотрим код, который туда записался:

В данном макросе записаны все действия, которые мы выполнили во время его записи. Эти методы и свойства можно использовать в C# коде.

Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:

Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.

Visual c excel

Шаг прислал Yegor A. Blackheel (blackheel@rlt.ru)

И снова начало.

Вторым офисным приложением, автоматизацию которого мы рассмотрим, будет MS Excel. Это сделано в связи с тем, что автор получает много писем с просьбой рассказать именно об этой теме.

Предполагается, что читатель уже ознакомился с первыми тремя частями статьи и имеет представление об автоматизации, зачем она нужна, с чем её едят и т.д.

ВАЖНОЕ ЗАМЕЧАНИЕ! В связи с тем, что прогресс не стоит на месте, всё, что рассматривается ниже, подразумевает наличие Офиса ХР. А также из любви к новым технологиям пример разбирается для Visual C++ 7.0

4.1. Подготовка проекта.

Готовим проект так, как об этом рассказываалось в первой части статьи. Тип проекта — диалоговое окно, назовем его ExcelTest, с помощью редактора ресурсов добавим на форму диалога 2 кнопки — Test и Cancel . Кнопке Test зададим идентификатор IDС_TEST . Нечто подобное проделывалось ранее и не должно вызывать трудностей.

Поскольку ClassWizard‘а в Visual C++ 7.0 больше не существует, зададим обработчик нажатия на эту кнопку простым даблкликом на кнопке. Сохраним название по умолчанию OnBnClickedTest() .

Также как и в случае Word‘a нам необходима библиотека типов. На этот раз в качестве такой библиотеки выступит сам Excel. Структура объектов сервера автоматизации Excel схожа с о структуров объектов Word‘a. Напомним, что самым верхним уровнем является Application (приложение), ниже которого лежат объекты и коллекции объектов. Объектами можно управлять напрямую, а из коллекции сначала нужно извлечь экземпляр, затем уже работать с ним. Но для нас все объекты и коллекции будут выглядеть просто как классы.

Для начала нам понадобятся такие объекты, как приложение, рабочая книга и лист рабочей книги (Application, Workbook и WorkSheet ), а также коллекции двух последних. Импортируем эти классы из библиотеки типов:

Вместо ClassWizard‘a выбираем Project|Add class.

а в нём — создать класс MFC из библиотеки типов:

Теперь среда разработки сама показывает нам доступные библиотеки типов. Больше не надо рыскать по диску в поисках olb, tlb, dll и прочих exe :).

Как мы видим, в левом списке Interfaces находятся доступные интерфейсы объектов Excel‘я. Перенесите _Application, _Workbook, Workbooks, Worksheets и _Worksheet в правый список Generated classes. По окончании нажмите кнопку Finish.

Add class From Typelib Wizard сгенерил классы по нашему запросу, и записал их в .h файлы с соответсвующими именами. Файлы эти были автоматически включены в проект.

Теперь все готово к старту.

4.2. Пуск!

Также как и Word, Excel заносит данные о себе и своих объектах в реестр, и к ним можно ображаться по символьным именам. Для Excel‘а (любого, независимо от версии) это «Excel.Application«.

Читать еще:  Возможности vba в excel

В файл ExcelTest.cpp в функцию InitInstance() перед вызовом AfxEnableControlContainer(), т.е. в самом начале добавляем строки:

Это заставит проинициализироваться систему OLE. Если этого не сделать, то вызов CreateDispatch не сработает. В файл ExcelTestDlg.h добавим необходимые .h файлы. В класс CExcelTestDlg добавми переменную app типа CApplication, а в нашу функцию OnBnClickedTest добавляем следующий код:

Если все сделано правильно, то скомпилировав и запустив приложение вы откроете Excel с новой рабочей книгой с шаблоном по умолчанию, то есть «книга с тремя пустыми рабочими листами».

4.3. Падают, падают, падают листья.

Добавми к нашей рабочей книге новый рабочий лист. Как мы уже знаем, в Excel‘е все рабочие листы являются членами коллекции CWorksheets, которая, в свою очередь, принадлежит объекту CWorkbook — рабочая книга. Поэтому лист добавляем к коллекции листов вновь созданной рабочей книги:

4.4. Детки в клетке.

Теперь мы можем оперировать с ячейками нашего рабочего листа. Для примера давайте занесём несколько числовых значений в ячейки, просуммируем их, поменяем стил границ и сольём четыре ячейки вместе. Для помещения текста в ячейки воспользуемся механизмом диапазонов, сходным с тем, что мы использовали в Word ‘e. Добавьте классы CRange, CBorders, CBorder также, как описано в пункте 1.

Если все сделано правильно, то мы получим вот такой вид:

4.5. . чертили чёрными чернилами чертёж.

И, наконец, рассмотрим, как добавить еще один важный объект — диаграмму. Используя Add class From Typelib Wizard (как описано в пункте 1) добавим еще несколько классов, а именно: CCharts, CChart и CChartTitle.

Наша диаграмма будет располагаться на отдельном рабочем листе, содержать в качестве данных числа из ячеек A1:A3 , иметь тип «столбчатая», заголовок и называться «Моя диаграмма».

4.6. Чисто там, где убирают!

После того, как мы поработали с Excel-ем, его надо корректно закрыть. Корректно, это значит не просто вызвать метод Quit(), а еще и отпустить все интерфейсы. В сети постоянно задается вопрос «Я закрываю Excel, а он остается висеть в памяти, что делать?». У меня тоже этот вопрос появился, когдa я обнаружил, что закрывая программно Excel я вовсе не выгружаю его из памяти! Часовой поиск в инете, в частности, по форумам RSDN дал ключ. Итак, корректное закрытие всего и вся + выгрузка Excel-я: Замечание — пункт 4.6 включен в исходники в виде комментария. Поместите код в нужное место программы и снимите комментарий.

Исходники

Здесь вы можете загрузить иллюстрирующий проект.
Скачать исходники — архив ZIP,

Как использовать excel в MS visual C++

Я хочу сделать приложение формы windows. Вы можете написать текст в textBox’es, и когда вы нажмете кнопку, приложение создаст файл excel и запишет текст из полей. Я сделал только UI, я знаю некоторые основы, но я понятия не имею, как объединить MS Visual C++ и Excel.

2 Ответа

Кроме того, «ExcelFormat Library» является базовым, но похоже, что он сделает все, что вам нужно. Он бесплатный и простой в использовании.

А номер дак -это коммерческая библиотека, которую я создал.

Это код C #, взятый из https://code.google.com/p/excellibrary/ , Поиграйте немного с этим кодом в VC + + и заставьте его работать. 🙂 Синтаксис другой, но если вы подумаете об этом, то увидите, что все это одно и то же. 😉 Сначала вы должны скачать файл ExcelLibrary.dll и добавить его в справочный проект. Чем добавить эти две строки: использование пространства имен ExcelLibrary::CompoundDocumentFormat; использование пространства имен ExcelLibrary::SpreadSheet;

Цель этого проекта-предоставить собственное решение .NET для создания, чтения и изменения
Excel файлов без использования соединения COM interop или OLEDB.

В настоящее время реализован формат .xls (BIFF8). В будущем .xlsx (Excel 2007) также может быть поддерживаемый.

Похожие вопросы:

Как мы можем обнаружить, что MS Excel установлен в Silverlight 4 и C# ? Могу ли я как-то использовать этот код или ?? dynamic excelApp; excelApp = AutomationFactory.CreateObject(Excel.Application);.

В офисе, это популярно использовать MS Excel для хранения данных. В большинстве случаев данные структурированы, что означает, что они подходят для базы данных. Я знаю, что peole предпочитает MS.

Можно ли использовать GNU gettext с MS Visual C++? Кто-нибудь знает, где найти образец проекта, который компилируется под Visual C++? Обновление: спасибо Сорину Сбарнеа за его комментарии, которые.

Я разрабатываю приложение OCA Windows form с C# .net 4.5 в Visual studio 2013. Я искал how to sync мою локальную базу данных с центральной базой данных; и я получил Microsoft Sync framework. Но все.

У меня есть 2 отдельные функции, одна из которых находится в MS visual C++ , а другая-в Matlab. Как выполнить файл Matlab в MS VISUAL? Есть ли функция windows для загрузки файла .m и его прямого.

Читать еще:  Активная ячейка в excel это

Я пытаюсь найти лучшее решение довольно сложной проблемы. Мне нужно иметь возможность публиковать данные из базы данных в виде панели мониторинга веб-страницы. Мне не разрешено запрашивать базу.

Я хочу автоматически сортировать поля в excel при вводе новых данных. Предположим, у меня есть следующие данные, Азбука БХД ЕФГ Хидж. Если я ввожу такие значения, как ‘Cde’ или ‘fgh’, он должен.

У меня есть 2 программы: одна написана на c++ и компилируется на MS visual studio 2010; другая написана на C# и компилируется на MS visual studio 2010. Моя вторая программа автоматически редактирует.

Я начинаю новый проект с нуля. Я пытаюсь определить, следует ли мне использовать C# из C++. В любом случае, это будет экспресс-версия MS Visual 2010. С точки зрения использования приложения, я почти.

Visual c excel

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Некоторое время назад задался целью найти готовую библиотеку для чтения/записи файлов .xls и .xlsx без установленного приложения Excel
Если Excel установлен, то кажется, что всё просто. Однако: 1) он должен быть установлен 2) есть разница работы с разными версиями офиса — зависим от версии 3) запись больших таблиц работает очень медленно. и т.д., на этом проблемы не заканчиваются.
После серьёзного изучения вопроса, понял, что действительно стоящего варианта — не найдено. Существует несколько библиотек, как свободных, так и платных. Но ни те, ни другие — не удовлетворяют. С чтением таблиц — проблем нет, это делается, например, через MS Jet. А вот запись, тем более — с форматированием, вызывает вопросы.
Задача «минимум» для такой библиотеки:
1) запись файла (например, .xlsx) из dataset — одним вызовом.
2) автоматический подбор ширины столбцов по содержимому (AutoFit)
3) выбор шрифта (хотя бы одного на весь файл) и его размера
4) установка автофильтра на всё содержимое
т.е. получаем файл, готовый к просмотру и к обработке данных без лишних телодвижений вручную. Желательно, чтобы использование библотеки выглядело как можно более лаконично в коде.

Предлагаю обсудить, кто чем пользуется, какие библиотеки рекомендует.

Пробовал EPPlus 2.9, GemBox.Spreadsheet. На крайний случай сгодится, но не очень.

Во многих библиотеках присутствует один и тот же глюк: формат «# ##0,##» до Excel доходит как «# ##0,##».

Generates Excel files from WinForms, WebForms ASP.NET, PocketPC applications, webservices on the fly and fast with FlexCel Studio for .NET
Native .NET components (no additional OLE/dlls required) allowing to read, create and modify native Excel .XLS and .XLSX files without needing to have Excel installed.
Supported Excel 97 .XLS file format and Excel 2007/2010 .XLSX format
Native PDF file export
Exceptionally fast and solid hand tuned .XLS & .XLSX engine capable of generating thousands files per minute.
Able to modify .XLS files and keep almost everything existing on the original file, from macros to activex objects.
Recalculation of more than 200 Excel functions.
Ability to read and write encrypted .XLS files.
Completely written in C# 100% managed code, with NO interop and NO p/invokes!
Runs on .NET 2.0, .NET 3.0, .NET 3.5, .NET 4.0, Mono and the .NET Compact Framework (xlsx support requires .NET 3.5).
Templates can be stored inside your executable file, in a database or in any place from where you can access it as a stream.
Extensive API is available with which you can programmatically write and read files, with formatting info, images comments, etc.
Export to HTML in HTML 4.01 strict or XTHML 1.1 and fully standards compliant
Report Engine that allows to create complex reports using Excel as your report designer, so your final users can modify them. You can use images/comments/conditional formats/merged cells/pivot tables/charts and almost anything you can think of on those reports.

using System.IO;
using System.Globalization;
using System.Drawing;
using FlexCel.Core;
using FlexCel.XlsAdapter;

public void CreateAndSaveFile()
<
XlsFile xls = new XlsFile(true);
CreateFile(xls);

//Save the file as XLS
xls.Save(openFileDialog1.FileName);
>

public void CreateFile(ExcelFile xls)
<
xls.NewFile(1); //Create a new Excel file with 1 sheet.
xls.ActiveSheet = 1; //Set the sheet we are working in.
>
Все имеется. Куча примеров.Могу кинуть на обменник FS. правда немного староват дистр.

Вообще-то не помешает, по крайней мере поизучать. Я сам кое-что попробовал, но форматирование — не прошло, вообще. Не понял пока что не так.

Кстати, YuriyRR, может ты заодно знаешь почему все библиотеки (может не все, но всё что я пробовал — это много) корёжат формат, заданный строкой, я тут уже выше писал:

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

Читать еще:  Vba excel offset

Добавлено:
Когда-то давно делал репорты в excel на asp.net вообще без библиотек:

— сохраняешь готовый отформатированный пример репорта с одной строчкой в xml
— копи-пастишь как есть в aspx
— находишь строчку с данными и делаешь итерацию по датасету
— бинго! — красивый репорт за 15 мин

Зпт. у них активно используется, как разделитель групп разрядов

Правильная, хотя может быть и нестандартная (что тут вообще стандарт?):
Десятичный разделитель — зпт.
Разделитель групп разрядов — пробел

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

Имеет смысл проверить на машине с en-US и с английским же форматом, а потом уже смотреть где валится на русской, да еще и с хитрой локалью.

Как легко создать Excel UDF с проектом надстройки VSTO

16 [2009-06-05 22:07:00]

То, что я пытаюсь сделать, — создать пользовательские функции (UDF) для Excel, используя VSTO С# «Excel 2007 Add-in» — тип проекта (так как я просто хочу сгенерировать некоторые общие UDF). Поскольку я только пытаюсь изучить основы (на этом этапе так или иначе), это то, как выглядит мой код:

Он отлично компилируется, и когда я его запускаю, Excel появляется со свежей электронной таблицей, и когда я смотрю на «Add-Ins» -list (в вариантах Excel), я могу видеть свою надпись в списке ( который установлен на «Загрузка при запуске». Но вот моя проблема, когда я пытаюсь вызвать свой UDF из встроенного Excel, Excel не может найти метод!

То, что я представляю, ошибочно, заключается в том, что я должен пометить свой метод как Excel UDF (используя квадратные скобки — как это делается, например, при кодировании веб-сервисов → «[WebService]» ). Но я не смог отследить этот тег (и, поскольку я не уверен, если моя догадка верна), вот почему я решил пойти к вам, прекрасные люди здесь, в SO.

Итак, мой вопрос в основном — от того, где я с моим кодом, есть ли простой способ сделать мой UDF доступным для Excel? Если да, то как?

Я действительно хотел бы остаться в рамках проектов проекта VSTO (надстройка, рабочая книга, шаблон), так как моя общая цель для моего текущего проекта — установить, работает ли выполнение С# UDF с VS2010/Excel2007 на приемлемом скорость. Чтобы проверить это, я работаю над Windows7RC и с VS2010 beta1.

c# visual-studio-2010 excel-2007 vsto

4 ответа

19 Govert [2009-06-12 15:38:00]

VSTO не поддерживает создание Excel UDF. Надстройки надстройки могут быть созданы в .Net и, похоже, одобрены Microsoft.

Вы должны взглянуть на ExcelDna — http://www.codeplex.com/exceldna. ExcelDna позволяет управляемым сборкам предоставлять пользовательские функции (UDF) и макросы в Excel через собственный .xll-интерфейс. Проект является открытым исходным кодом и свободно разрешает коммерческое использование. И вы обнаружите, что производительность вашего UDF на базе .NET аналогична встроенным надстройкам .xll для Excel. Функции Excel 2007, такие как большой лист, поддерживаются длинные строки Unicode и многопоточный пересчет.

С ExcelDna ваша функция, опубликованная выше, будет открыта для Excel без VSTO — вы можете поместить код в xml-основанный .dna файл или скомпилировать его в .dll.

Файл .dna, отображающий ваш UDF, будет выглядеть так:

Обновление:. В наши дни самым простым способом начать работу с Excel-DNA является создание нового проекта библиотеки классов в Visual Studio, а затем добавление пакета «ExcelDna.AddIn» из NuGet. Это делает надстройку стартера — просто вставьте свой код и нажмите F5 для запуска.

Насколько я знаю, вы не можете напрямую создавать UDF в VSTO.

См. статью Пола Стаббса Как создать Excel UDF в управляемом коде VSTO, где он использует надстройку VBA для публикации VBA UDF, которая в свою очередь, вызывать его управляемые UDF, написанные в VSTO.

Вы можете использовать управляемый код для создания UDF, однако, когда не используете VSTO. См. Статью Эрика Картера Написание пользовательских функций для Excel в .NET о том, как это сделать.

Что касается скорости выполнения VSTO, я думаю, вы найдете все в порядке для практически всех задач. Однако, зацикливание через ячейки, которое уже является слабым местом Excel, может быть болезненно медленным, в зависимости от того, что вы делаете. Постарайтесь выполнять все в пакетном режиме, насколько это возможно. Например, вместо того, чтобы перебирать ячейки по одному, возвращаем двухмерный массив значений из области, обрабатываем массив и затем передаем его обратно в диапазон.

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

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×