Delphi замена текста в excel
Для работы с Excel в Delphi, первым делом нужно в Uses указать модуль ComObj.
Как запустить Excel и открыть новый документ в Delphi
XL : = CreateOLEObject ( 'Excel.Application' ) ; // Создание OLE объекта
Как обратиться к отдельным ячейкам листа Excel в Delphi
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 1 , 1 ] . Value : = '30' ;
//Результатом является присвоение ячейке [1,1] первого листа значения 30. Также к ячейке
Как добавить формулу в ячейку листа Excel в Delphi
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 3 , 3 ] . Value : = '=SUM(B1:B2)' ;
Форматирование текста в ячейках Excel, производится с помощью свойств Font и Interior объекта Cell:
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 1 , 1 ] . Interior . Color : = clYellow ;
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 1 , 1 ] . Font . Color : = clRed ;
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 1 , 1 ] . Font . Name : = 'Courier' ;
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 1 , 1 ] . Font . Size : = 16 ;
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Cells [ 1 , 1 ] . Font . Bold : = True ;
Работа с прямоугольными областями ячеек, с помощью объекта Range:
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Range [ 'A1:C5' ] . Value : = 'Blue text' ;
XL . WorkBooks [ 1 ] . WorkSheets [ 1 ] . Range [ 'A1:C5' ] . Font . Color : = clBlue ;
//В результате в области A1:C5 все ячейки заполняются текстом 'Blue text'.
Как выделить группу (область) ячеек Excel в Delphi
Как установить объединение ячеек, перенос по словам, и горизонтальное или вертикальное выравнивание Excel в Delphi
Как задать границы ячеек Excel в Delphi
Как выровнять столбцы Excel по ширине, в зависимости от содержания
Как удалить столбец Excel в Delphi
Как задать формат ячеек Excel в Delphi
XL . columns [ 1 ] . NumberFormat : = '@' ; // текстовый формат
XL . columns [ 1 ] . NumberFormat : = 'm/d/yyyy' ; // формат дата
XL . columns [ 1 ] . NumberFormat = '0.00%' // формат процентный
Поиск по сайту
Okolokompa в Яндекс Дзен
Для полноты картины нужно еще описать способ быстрого форматирования ячеек и показать скорость работы XLSReadWrite
Я для своих задач использую XML SpreadSheet. С радостью пересел бы на что-то иное.
Bogdan , вынеси на форуме просьбу о создании подобного раздела. Если Влад одобрит, то создаст. Можно пообсуждать конечно, в плане даже проверенных, рабочих дистрибутивов, общих вопросов, того-же FireMonkey и т.д. У меня есть пара дистрибутивов, но все руки не доходили, вечерком сегодня попробую, если инстол пройдет нормально, обязательно отпишусь с сылками от куда их брал.
Влад, надеюсь до конца дня скачаешь и отпишешься, ну или хотябы завтра, а скорость у тебя, относительно моей вообще в 3 раза выше ) думаю до завтра точно осилишь оставшиеся 20 % )
// Да прибудет с тобой сила, Влад!
Алекс, это переменная типа Variant
Чтение данных из Excel
ExcelApp.Workbooks.Open(edFile.Text); почему ругается наэту функцию?
Доброго времени суток. Подскажите как записать данные в разные столбики с разными именами
Я работаю с БД FireBird и экспортирую из рекордсета. и если там попадаются русские буквы, то он не пишет в ячейку вообще ничего
Спасибо за информацию. Вы очень мне помогли.
Рекомендуемая библиотека XLSReadWrite стоит 295 евро. Я как-то не готов пока к такой покупке.
Посоветуйте более доступные аналоги пожалуйста.
Как прочитать из документа EXCEL колонку, содержащую рисунок со штрих кодом, чтобы он прочитался как 13 цифр
Здравствуйте, Владислав. Честно говоря, я-не программист, но уж очень хочется для себя постичь эту тему. Много времени провожу в Вашем блоге, но пока получается стряпать только методом копи-паста. На данный момент работаю над программой, объединяющей данные из 2х документов типа Exele. Задача состоит в том чтоб открыть 2 документа, стартовать с определенной ячейки второго документа, получив ее значение, искать его в первом документе. Оба состоят из длинного списка на одном листе. Т.к. только начинаю программировать, выбрал способ по одной ячейке- скорость не особо важна. Но вот незадача- получив значение из второго документа, не пойму как активировать первый и искать в … Подробнее »
В этой статье я познакомлю вас как работать с MS Excel из Delphi. Данная статья может быть полезна людям, которые хотят научиться создавать различные отчеты в Excel из программ написанных на Delphi. Статья содержит справочные данные необходимые для работы с MS Excel. Здесь вы найдете информацию о том как:
- Подключить и правильно отключить интерфейс Excel;
- Как изменить размер, цвет и тип шрифта;
- Как выделить, объединить, заполнить и размножить диапазон ячеек;
- Как повернуть и отцентрировать текст;
- Как нарисовать границы ячеек;
- Как ввести формулу в ячейку и многое другое.
Работать будем через модуль ComObj, для этого в uses необходимо добавить модуль ComObj и модуль Excel_TLB (для MS Excel 2007).
Uses ……, ComObj, Excel_TLB;
Модуль Excel_TLB содержит необходимые константы для работы с Excel, его можно не подключать, но тогда придется в ручную прописывать значения всех используемых констант из этого модуля. Значения констант можно найти внутри модуля или в интернете, но для разных версий MS Excel они разные.
Внимание. Модуль Excel_TLB в других версиях MS Excel может называться по другому. Перед подключением модуля Excel_TLB, необходимо импортировать библиотеку Excel. Для этого выберите Component->Import Component->Import a Type Library-> находим MS Excel и следуем инструкциям.
В разделе описания переменных мы должны описать переменную типа Variant или OleVariant для подключения интерфейса Excel. Я описал переменную excel.
Form1: TForm1;
excel : variant; // Переменная в которой создаётся объект EXCEL
Создание документа
Внимание. Всегда когда создаете объект интерфейса, заключайте процедуру создания в модуль обработки ошибок:
try
создаем интерфейс;
формируем отчет;
освобождаем интерфейс;
Except
обрабатываем ошибки;
освобождаем интерфейс;
end;
Далее идет краткий справочник по основным функциям работы с EXCEL
// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts := false;
// создаем новый документ рабочую книгу
excel.WorkBooks.Add;
// Делаем его видимым данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет)
excel.Visible := true;
//задаем тип формул в формате R1C1
excel.Application.ReferenceStyle := xlR1C1;
// задаем тип формул в формате A1
excel.Application.ReferenceStyle := xlA1;
// задаем ширину первой и второй колонки
excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 10;
excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 20;
// Выравнивам первый ряд по центру по вертикали
excel.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := xlCenter;
// Выравнивам первый ряд по центру по горизонтали
excel.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := xlCenter;
// Выравнивам в ячейке по левому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 2].HorizontalAlignment := xlLeft;
// Выравнивам в ячейке по правому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 4].HorizontalAlignment := xlRight;
// Поворачиваем слова под углом 90 градусов для второго ряда
excel.WorkBooks[1].WorkSheets[1].Rows[2].Orientation := 90;
//рисуем границы выделенного диапазона левая
excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous; // стиль линии сплошная
excel.Selection.Borders[xlEdgeLeft].Weight := xlMedium;// толщина линии
//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeTop].Weight := xlMedium;
//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeBottom].Weight := xlMedium;
//рисуем границы выделенного диапазона правая
excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeRight].Weight := xlMedium;
//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders[xlInsideVertical].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideVertical].Weight := xlMedium;
//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders[xlInsideHorizontal].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideHorizontal].Weight := xlMedium;
//отключаем предупреждения, чтобы не задавал вопросов о сохранении и других
excel.DisplayAlerts := False;
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel := Unassigned;
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel := Unassigned;
end;
end;
После сформирования документа или возникновении ошибки вы должны правильно освободить интерфейсы.
Иначе при закрытии Excel он скрывается с экрана, но если открыть диспетчер задач он продолжает там висеть и если данный процесс не завершить , то при каждом новом запуске их будет накапливаться больше и больше, пока компьютер не начнет виснуть. Поэтому обязательно необходимо освобождать все интерфейсы с вязанные с Excel с его книгами и листами.
Например так:
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
sheet:=Unassigned; //интерфейс листа если он был создан
WorkBook := Unassigned;//интерфейс рабочей книги если он был создан
excel := Unassigned;//интерфейс самого предложения если он был создан
Ниже привожу пример вывода в Excel из Delphi таблицы умножения с подробными комментариями.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, comobj, StdCtrls, Excel_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
var
Form1: TForm1;
excel: variant; // Переменная в которой создаётся объект EXCEL
MyData: variant; // Переменная в которой формируется таблица умножения
i,j:integer;
implementation
//объявляем вариантный массив
MyData := VarArrayCreate([1,9,1,9],varVariant);
for I := 1 to 9 do
for J := 1 to 9 do
MyData[i,j]:=i*j;
В предыдущем посте я рассказывал, как работать с MS Excel из Delphi через ComObj (Com объект).
В этой статье я расскажу, как подключить таблицу MS Excel через компонент ADOConnection в Delphi. Из данной статьи вы сможете узнать о способах данного подключения. Как загрузить данные из таблицы MS Excel в компонент DBGrid. Как создавать и сохранять записи в таблице MS Excel из Delphi.
И так, приступим…
Запустим Delphi и создадим новое приложение File -> New-> VCL Forms Application – Delphi.
Разместим на форме следующие компоненты:
1. Компонент TADOConnection из вкладки dbGo (ADO);
2. Компонент TADOQuery из вкладки dbGo (ADO);
3. Компонент TDataSource из вкладки Data Access;
4. Компонент TDBGrid из вкладки Data Controls;
5. И два компонента TButton из вкладки Standard.
и сохраним ее как 1.xlsx для (MS Excel 2007) или 1.xls для (MS Excel 2003).
Затем настроим компоненты…
Начнем с компонента подключения к базе ADOConnection1. Мы будем подключаться к таблице MS Excel.
В инспекторе объектов для компонента ADOConnection1 выбираем свойство ConnectionString и вписываем туда следующую строку для MS Excel 2007:
Provider =Microsoft.ACE.OLEDB.12.0; Data Source =1.xlsx; Extended Properties ="Excel 12.0 Xml;HDR=YES";
Файл 1.xlsx должен находиться в папке с приложением.
При указании полного пути до файла:
Если у вас MS Excel 2003 то вписываем следующую строку:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Extended Properties=Excel 8.0;
Файл 1.xls должен находиться в папке с приложением.
Также можно подключиться через мастера подключения, для этого нажимаем:
Находим наш файл и жмем ОК.
Внимание. К сожалению такое подключение возможно только для файлов Excel сохраненных в формате Excel 97-2003 (*.xls), поэтому в моем случае выдаст ошибку.
После установки подключения убираем галочка со свойства LoginPromt, чтоб не запрашивал пароль и переходим к настройке компонента ADOQuery1.
Свойство Connection устанавливаем ADOConnection1;
Свойство SQL --> TString --> пишем запрос SELECT * FROM [Лист1$] ;
Свойство Active--> True.
Переходим к компоненту DataSource1 и устанавливаем ему свойство DataSet -- > ADOQuery1.
Переходим к компоненту DBGrid1 и устанавливаем ему свойство DataSource--> DataSource1.
После данных настроек, если вы все сделали правильно в DBGrid должны отобразиться поля вашей таблицы. Чтобы изменить размер отображаемых полей в Structure выбираем:
Должно получиться следующее:
Внимание. Перед запуском на выполнение, необходимо убрать галочки у компонента ADOConnection1 -- >Connected и у компонента ADOQuery --> Active иначе будут сыпаться ошибки, типа не могу подключиться, так как подключение уже используется.
Дело движется к концу. Осталось только написать обработчики событий для кнопок (назовем их "Новая запись" и "Сохранить" соответственно). Начнем…
Для события OnClick кнопки «Сохранить» пишем следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Edit;
ADOQuery1.Post;
end;
Для события OnClick кнопки «Новая запись» пишем следующий код:
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.Append;
end;
И для события OnCreate формы пишем:
Сохраняем, запускаем на исполнение и видим, что с таблицами MS Excel можно работать также как и с файлами базы данных, но есть одно но, данный провайдер подключения не поддерживает удаление записей.
Читайте также: