Progress-servis55.ru

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

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]

> А администратору просьба банить людей, пишущих не по делу .
ты путаешь форум программистов, где учат, с форумом поддержки типа «вопрос — ответ даже если он глупый» . тут если бы дали сразу прямой «справочный» ответ, именно это было бы «не по делу . «

Читать еще:  Размер а4 в excel


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 формат ячейки

Опции темы

Шустрый

Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2

Ptica
Дата 5.1.2005, 14:06 (ссылка) | (нет голосов) Загрузка .
[/B], ‘); return false;» title=»Вставить ник в поле ввода»>
Дата 5.1.2005, 14:38 (ссылка) | (нет голосов) Загрузка . ‘, ‘5.1.2005, 14:38’, 294885);»>

Око кары:)

Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64

Код
procedure TForm1.Button2Click(Sender: TObject);
var
Excel, WorkBook, WorkSheet: OleVariant;
begin
try
Excel := CreateOleObject(‘Excel.Application’);
Excel.Visible := True;
WorkBook := Excel.WorkBooks.Add;
WorkSheet := Excel.WorkSheets.Add;
WorkSheet.Cells[1, 1].Interior.Color := clRed;
WorkSheet.Cells[1, 1].NumberFormat := ‘@’;
WorkSheet.Cells[1, 1].Value := ‘0012323’;
finally
Excel := Unassigned;
end;
end;

Шустрый

Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2

Ptica
Дата 5.1.2005, 15:11 (ссылка) | (нет голосов) Загрузка .
Akella
Дата 24.1.2005, 16:28 (ссылка) | (нет голосов) Загрузка .

Творец

Профиль
Группа: Модератор
Сообщений: 18484
Регистрация: 14.5.2003
Где: Корусант

Репутация: 2
Всего: 329

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

Google
Дата 4.4.2020, 05:56 (ссылка)

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 имеет два входных параметра:

  1. XLSFile – путь к файлу Excel (xls)
  2. 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»;

Ссылка на основную публикацию
Adblock
detector