Delphi excel формат ячейки
Delphi excel формат ячейки
В программе на D7 создаю и заполняю лист Excel 2007 данными разного типа.
Excel := CreateOleObject(«Excel.Application»);
Excel.Application.EnableEvents := false;
WorkBook := Excel.Application.WorkBooks.Add;
WorkBook.WorkSheets[1].Columns[j].WrapText := True;
WorkBook.Worksheets[1].Columns[j].VerticalAlignment := 1;
WorkBook.WorkSheets[1].Cells[1,j].Font.Name := . ;
WorkBook.WorkSheets[1].Cells[1,j].Font.Size := . ;
WorkBook.WorkSheets[1].Cells[1,j].Borders.LineStyle := 1;
Все это работает.
Вопрос — Как программно задать формат ячейки? В частности, чтобы был числовой формат с заданным количеством десятичных знаков и разделением разрядов по тысячам.
Также сделать формат типа «дата» (dd.mm.yyyy).
Заранее благодарен.
← →
sniknik © ( 2011-05-20 11:25 ) [1]
научись делать/записывать макросы в самом экселе. кушу вопросом разом решишь. нужно, что записываешь то что делаешь «руками» и смотришь как это делает эксель.
← →
samalex2504 ( 2011-05-20 11:35 ) [2]
> sniknik © (20.05.11 11:25) [1]
>
> научись делать/записывать макросы в самом экселе. кушу
> вопросом разом решишь. нужно, что записываешь то что делаешь
> «руками» и смотришь как это делает эксель.
Я уже все сделал средствам Delphi, остался только формат ячейки.
← →
sniknik © ( 2011-05-20 11:39 ) [3]
а тебе и не предлагают перенести в «средства экселя», тебе предлагают освоить инструмент который отвечает на подобные (и много сложнее) вопросы.
т.е. ситуация типа «дать рыбу» vs «научить рыбачить»
← →
Dennis I. Komarov © ( 2011-05-20 11:42 ) [4]
while ProblemExist do
Read([1]);
← →
samalex2504 ( 2011-05-20 11:54 ) [5]
> Dennis I. Komarov © (20.05.11 11:42) [4]
>
> while ProblemExist do
> Read([1]);
.
← →
Anatoly Podgoretsky © ( 2011-05-20 11:56 ) [6]
> Я уже все сделал средствам Delphi, остался только формат
> ячейки.
Ошибаешься, Дельфи тут не причем, все сделал COM сервер.
← →
samalex2504 ( 2011-05-20 12:01 ) [7]
Софисты.
Один (Dennis I. Komarov ©) глумится.
Другой (Anatoly Podgoretsky ©) общие лекции читает.
Я быстрее сам найду.
← →
sniknik © ( 2011-05-20 12:06 ) [8]
на что только люди не идут. лишь бы не работать.
нет чтобы 3 кнопки нажать, за 5 мин научится, через 10 сделать, и в дальнейшем такими вопросами не задаваться, нет будет день «типа искать», и еще на будущее «отмазка» останется.
← →
Dennis I. Komarov © ( 2011-05-20 12:13 ) [9]
> samalex2504 (20.05.11 12:01) [7]
«. разруха не в клозетах, а в головах.» (С)
← →
samalex2504 ( 2011-05-20 12:22 ) [10]
Удалено модератором
Примечание: Моедратор сам разберется, без советов
← →
Anatoly Podgoretsky © ( 2011-05-20 12:25 ) [11]
> samalex2504 (20.05.2011 12:01:07) [7]
Век ищи, все равно дураком останешься.
(с) Народная мудрость.
← →
sniknik © ( 2011-05-20 12:27 ) [12]
> А администратору просьба банить людей, пишущих не по делу .
ты путаешь форум программистов, где учат, с форумом поддержки типа «вопрос — ответ даже если он глупый» . тут если бы дали сразу прямой «справочный» ответ, именно это было бы «не по делу . «
← →
samalex2504 ( 2011-05-20 13:04 ) [13]
Между прочим, мне никто так и не ответил .
← →
sniknik © ( 2011-05-20 13:15 ) [14]
← →
Anatoly Podgoretsky © ( 2011-05-20 13:23 ) [15]
> samalex2504 (20.05.11 13:04) [13]
Плохой танцор, хороший папа.
← →
samalex2504 ( 2011-05-20 14:05 ) [16]
Удалено модератором
Примечание: Обсуждение модерирования
← →
Amoeba_ ( 2011-05-20 15:12 ) [17]
> Как программно задать формат ячейки?
Читать здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalog >
← →
Palladin © ( 2011-05-20 18:12 ) [18]
> sniknik © (20.05.11 13:15) [14]
забей, пациент неадекватен
Delphi excel формат ячейки
Опции темы
Ptica |
| ||
|
[/B], ‘); return false;» title=»Вставить ник в поле ввода»> |
| ||
![]() Око кары:) Профиль Репутация: нет
| |||
|
Ptica |
| ||
|
Akella |
| ||
![]() Творец Профиль Репутация: 2 | |||
|
| |||||||||||||||||||||||||||||||||||||||||||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
[ Время генерации скрипта: 0.1314 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Канал в Telegram
Вы здесь
Читаем файл Excel (xls) в Delphi
При написании бизнес приложений на Delphi, выполняющих какие либо расчеты, может возникнуть необходимость импорта (экспорта) данных из файлов других приложений. Одно из основных таких приложений – MS Excel. Как прочитать файлы xls в Delphi мы сейчас и рассмотрим!?
Создадим новый проект и разместим на форме три компонента:
StringGrid – находится на палитре компонентов, во вкладке Additional
Кнопку Button и для удобства выбора файлов, диалог открытия файлов (работа с диалогами описана здесь).
Для StringGrid, в свойствах(Properties) укажем следующее:
DefaultRowHeight – 17
FixedCols – 0
FixedRows – 0
В результате форма будет выглядеть примерно так:
На этом украшательства закончим и приступим к написанию кода.
Для работы с Excel файлами нам понадобится библиотека ComObj, входящая в стандартную поставку Delphi. Подключается она в разделе Uses. Добавьте в конце, после запятой «ComObj».
Теперь опишите процедуру Xls_Open после ключевого слова implementation:
procedure Xls_Open(XLSFile:string; Grid:TStringGrid);
const
xlCellTypeLastCell = $0000000B;
var
ExlApp, Sheet: OLEVariant;
i, j, r, c:integer;
begin
//создаем объект Excel
ExlApp := CreateOleObject(‘Excel.Application’);
//делаем окно Excel невидимым
ExlApp.Visible := false;
//открываем файл XLSFile
ExlApp.Workbooks.Open(XLSFile);
//создаем объект Sheet(страница) и указываем номер листа (1)
//в книге, с которого будем осуществлять чтение
Sheet := ExlApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1];
//активируем последнюю ячейку на листе
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
// Возвращает номер последней строки
r := ExlApp.ActiveCell.Row;
// Возвращает номер последнего столбца
c := ExlApp.ActiveCell.Column;
//устанавливаем кол-во столбцов и строк в StringGrid
Gr > Gr >
//считываем значение из каждой ячейки и копируем в нашу таблицу
for j:= 1 to r do
for i:= 1 to c do
Gr > //если необходимо прочитать формулы то
//Gr >
//закрываем приложение Excel
ExlApp.Quit;
//очищаем выделенную память
ExlApp := Unassigned;
Sheet := Unassigned;
end;
Наша процедура Xls_Open имеет два входных параметра:
- XLSFile – путь к файлу Excel (xls)
- Grid – таблица, в которую будем осуществлять вывод данных.
В комментариях к коду я постарался все расписать, объясню немного принцип работы процедуры.
Мы создаем в памяти объект ExlApp с приложением Excel.Application. Затем указываем что этот объект будет невидим для пользователя ExlApp.Visible := false (если false заменить на true, то при открытии файла мы увидим окно Excel с открываемым файлом). Далее открывается файл ExlApp.Workbooks.Open(XLSFile). Потом создаем еще один объект Sheet, который позволяет работать с листом книги Excel: Sheet := ExlApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1]. Единица в конце указывает номер листа с которого будем читать данные (к листам можно обращаться по имени, для этого вместо 1 указываем «ИмяЛиста1»). Далее определяем кол-во строк и столбцов которые содержат данные, и используя циклы For считываем данные копируя их в StringGrid. Впринципе и все.
Для использования процедуры Xls_Open пропишем в событие Click кнопки Button1 следующее:
If OpenDialog1.Execute then Xls_Open (OpenDialog1.FileName, StringGrid1);
Основные недостатки этого способа: медленное чтение данных (хотя для небольших файлов вполне сгодится) и необходимость установленной версии Excel на компьютере пользователя.
Полный листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls,ComObj;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
procedure Xls_Open(XLSFile:string; Grid:TStringGrid);
const
xlCellTypeLastCell = $0000000B;
var
ExlApp, Sheet: OLEVariant;
i, j, r, c:integer;
begin
//создаем объект Excel
ExlApp := CreateOleObject(‘Excel.Application’);
//делаем окно Excel невидимым
ExlApp.Visible := false;
//открываем файл XLSFile
ExlApp.Workbooks.Open(XLSFile);
//создаем объект Sheet(страница) и указываем номер листа (1)
//в книге, с которого будем осуществлять чтение
Sheet := ExlApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1];
//активируем последнюю ячейку на листе
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
// Возвращает номер последней строки
r := ExlApp.ActiveCell.Row;
// Возвращает номер последнего столбца
c := ExlApp.ActiveCell.Column;
//устанавливаем кол-во столбцов и строк в StringGrid
Gr > Gr >
//считываем значение из каждой ячейки и копируем в нашу таблицу
for j:= 1 to r do
for i:= 1 to c do
Gr > //если необходимо прочитать формулы то
//Gr >
//закрываем приложение Excel
ExlApp.Quit;
//очищаем выделенную память
ExlApp := Unassigned;
Sheet := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If OpenDialog1.Execute then Xls_Open (OpenDialog1.FileName, StringGrid1);
end;
end.
Обновленный пример. Добавлена функция отбора строк по критерию. Так же добавлен обработчик делающий отображение шрифта «шапки» в StringGrid жирным. Все дополнения постарался по максимуму раскомментить
Delphi excel формат ячейки
Здравствуйте, mr.dfox, Вы писали:
MD>Подскажите плиасе:
MD>Как задать формат ячейке Excel?
MD>Взаранее благадарю!
Если числовой то так
Range[c1,c2].NumberFormat
а если нет, то конкретизируй, а лучше запусти макрос в екселе и посмотри как он делает
![]() | От: | mr.dfox |
Дата: | 02.09.04 14:15 | |
Оценка: |
Здравствуйте, Овен, Вы писали:
О>Здравствуйте, mr.dfox, Вы писали:
MD>>Подскажите плиасе:
MD>>Как задать формат ячейке Excel?
MD>>Взаранее благадарю!
О>Если числовой то так
О> Range[c1,c2].NumberFormat
О> а если нет, то конкретизируй, а лучше запусти макрос в екселе и посмотри как он делает
На VB, это выглядит так:
Range(«C8»).Select
Selection.NumberFormat = «[h]:mm»
Незнаю как написать в Delphi
![]() | От: | Boy |
Дата: | 02.09.04 21:31 | |
Оценка: |
Здравствуйте, mr.dfox, Вы писали:
MD>Подскажите плиасе:
MD>Как задать формат ячейке Excel?
MD>Взаранее благадарю!
![]() | От: | mr.dfox |
Дата: | 03.09.04 00:13 | |
Оценка: |
Здравствуйте, mr.dfox, Вы писали:
MD>Подскажите плиасе:
MD>Как задать формат ячейке Excel?
MD>Взаранее благадарю!
Мне необходимо сложить время в определенных ячейках.
Пример:
А B C D
1 11:00 14:00 10:00 02:00
—-
Ячейка E1=СУММ(A1:D1).
——
Формат ячейки необходимо задать, для того, что бы получился резутьтат E1=: 37:00
Вместо 13:00
![]() | От: | Sheridan |
Дата: | 03.09.04 04:02 | |
Оценка: |
![]() | От: | Bichael |
Дата: | 03.09.04 04:40 | |
Оценка: |
![]() | От: | Овен |
Дата: | 03.09.04 06:48 | |
Оценка: |
Здравствуйте, mr.dfox, Вы писали:
MD>Здравствуйте, Овен, Вы писали:
О>>Здравствуйте, mr.dfox, Вы писали:
MD>>>Подскажите плиасе:
MD>>>Как задать формат ячейке Excel?
MD>>>Взаранее благадарю!
О>>Если числовой то так
О>> Range[c1,c2].NumberFormat
О>> а если нет, то конкретизируй, а лучше запусти макрос в екселе и посмотри как он делает
MD>На VB, это выглядит так:
MD>Range(«C8»).Select
MD>Selection.NumberFormat = «[h]:mm»
MD>Незнаю как написать в Delphi
![]() | От: | Arioch |
Дата: | 03.09.04 09:15 | |
Оценка: |
The stars so gaily glistened. (Thu, 02 Sep 2004 14:15:45 GMT @635)
. while the fading voice of mr.dfox whispered through the darkness:
md> На VB, это выглядит так:
md> Range(«C8»).Select
md> Selection.NumberFormat = «[h]:mm»
md> Незнаю как написать в Delphi
А поэкспериментировать? Сходить на www.DelphiKingdom.ru ?
Попробуй сделать тупо в лоб: Range(«C8», EmptyParam).NumberFormat :=
«[h]:mm»;
detector