Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.11;
Скачать: CL | DM;

Вниз

Dbgrid и Excel   Найти похожие ветки 

 
P0tia ©   (2003-08-21 11:56) [0]

Как перенести все фильтрованные данные в excel


 
Vlad ©   (2003-08-21 12:01) [1]

1) Создать объект Excel - CreateOleObject("Excel.Application")
2) Создать массив типа вариант - VarArrayCreate, куда запихнуть твой набор данных.
3) Положить этот массив на лист Excel, путем присваивания данного массива объекту Range

Хотя может и проще можно, не знаю.


 
DenK_vrtz ©   (2003-08-21 12:06) [2]

Так же как и нефильтрованные


 
P0tia ©   (2003-08-21 13:02) [3]

Если можно напиши код, так легче понять.


 
SiJack ©   (2003-08-21 13:17) [4]

Попробуй EhLib


 
Vlad ©   (2003-08-21 13:26) [5]

http://delphimaster.net/view/1-1061351355/

Там вроде правильно, только не с помощью массива, немного по-другому.


 
P0tia ©   (2003-08-21 14:53) [6]

Спасибо, а вы не могли бы дописать код как открывается Excel и как туда передать переменную


 
malamba   (2003-08-21 15:02) [7]

Почему-то я не советую пользоваться CreateOleObject
Лучше (быстрее) использовать встроенные серверы Excel с закладки Servers.

Вот под руку попался код:

sTemplatePath:= sProgrmPath + "Teplates.xls";

FormGlav.ExcelApplication.Workbooks.Add(sTemplatePath,0);
//FormGlav.ExcelApplication.Workbooks.Open(sTemplatePath,EmptyParam,Em ptyParam,
//EmptyParam,EmptyParam,EmptyParam,true,EmptyParam,EmptyParam,
//EmptyParam,EmptyParam,EmptyParam,false,0);
// Открываем шаблон и связываем его с имеющимся компонентом
FormGlav.ExcelApplication.Visible[0]:=false;
FormGlav.ExcelWorkbook.ConnectKind:=ckAttachToInterface;

IXlsWorkBook:= FormGlav.ExcelApplication.ActiveWorkbook;
FormGlav.ExcelWorkbook.ConnectTo(IXlsWorkBook);

ProgressBarProtocol.StepIt;
//**************************************** лист титульний2 *********************
IXlsSheet:= FormGlav.ExcelWorkbook.Worksheets.Item["титульний2"] as Excel2000._Worksheet;
IXlsSheet.Activate(0);


sTemp:= sNomerProtText + " від " + DateToStr(FormProtocol.DateTimeProtocol.Date) + " р.";
BufferToClipboard(sTemp);

Тут я использую не Cell.Value:=
а вставку из буфера обмена. Так быстрее.


 
Vlad ©   (2003-08-21 15:12) [8]

Там же написано :

Excel := CreateOleObject("Excel.Application"); //Создаем объект Excel
Excel.Visible:=True; //Делаем его видимым
Excel.WorkBooks.Add; //Создаем рабочую книгу

...............

Excel.ActiveSheet.Cells[i,j].FormulaR1C1 :=
Query1.Fields[i].AsString; // Записываем в нужную ячейку переменную из Query1

Единственное, лучше пользоваться не FormulaR1C1 а Value

Читайте код внимательнее.


 
P0tia ©   (2003-08-21 16:06) [9]

Где можно найти faq по excel и delphi


 
Vlad ©   (2003-08-21 16:17) [10]

Вот ссылка на FAQ
там еще несколько примеров использования Excel
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622198&n=23

А что опять у тебя не получается ?
Может опишешь конкретную проблему ?


 
P0tia ©   (2003-08-21 16:24) [11]

У меня такая проблема.
Есть таблица (фильтрованная), из нее нужно просто перегнать данные в excel( чтобы он создал новый лист, скопировал данные из таблицы и потом , уже в excele ты их распечатоваешь или сохраняешь).

Vlad, что можешь сказать?


 
Vlad ©   (2003-08-21 16:37) [12]

Ок. Давай по порядку.

1)Ты вот это делать пробовал ? Excel запускается ?

Excel := CreateOleObject("Excel.Application"); Excel.Visible:=True;
Excel.WorkBooks.Add;

2) Если 1 успешно, то попробуй перенести данные из таблицы в Excel
for j:=1 to Table1.RecordCount do begin
for i:=1 to Table1.Fields.Count do
Excel.ActiveSheet.Cells[i,j].Value :=
Table1.Fields[i].AsString;
end;
Table1.Next;
end;

Ну я так, наспех, мож где какая ошибочка и закралась...


 
P0tia ©   (2003-08-21 17:05) [13]

Первое не проходит, точнее программа запускается, а при нажатии вылетает EOleSysError Недопустимая строка с указанием класса


 
P0tia ©   (2003-08-21 17:08) [14]

Не, извени все нормально это я ошибся. Сейчас второе попробую


 
P0tia ©   (2003-08-21 17:12) [15]

Все супер, VLAD, Спасибо тебе большое. Если еще вопросы будут, поможешь?


 
Vlad ©   (2003-08-21 17:14) [16]

Excel на компе вобще установлен ?
Либо допустил синтаксическую ошибку в "Excel.Application"
или.... тогда не знаю.


 
Vlad ©   (2003-08-21 17:15) [17]

Ок. без проблем. :-)


 
P0tia ©   (2003-08-21 18:19) [18]

Vlad, к тебе еще два вопроса:
1. Как сделать чтобы
for i:=0 to DataModule2.Table1.FieldCount-1 do
Excel.ActiveSheet.Cells[1,i+1].value := DataModule2.Table1.Fields[i].DisplayName;

записалась жирным шрифтом?
2. Чтобы колонки в которые не вмещаются названия сами раздвегались?


 
P0tia ©   (2003-08-21 18:29) [19]

И еще два вопросика
1. Как можно записывать на 2-ой лист?
2. И можно ли в excel засунуть диограмму?


 
Vlad ©   (2003-08-21 19:07) [20]

Отвечаю по порядку.
1) Excel.ActiveSheet.Cells[1,i+1].Font.Bold:=true;
2) Excel.ActiveSheet.Cells.EntireColumn.AutoFit; //автоматически устанавливает размер колонок по длинне самого большего эл-та.
Другой вариант: Excel.ActiveSheet.Columns[i].columnwidth:=150; //ручная установка шинины столбца

3) Excel.Workbooks[1].WorkSheets[1].Cells[1,1].Value:="qqq";
Короче говоря как к рабочим книгам, так и листам обращаешься по индексу.
4) Не знаю, не пробовал.

И еще маленький совет. Открой в Excel"e редактор VisualBasic и почитай хелп, по объектам WorkBook, WorkSheet, Application.



Страницы: 1 вся ветка

Текущий архив: 2003.09.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
14-33740
Zheks
2003-08-25 00:32
2003.09.11
Shape


3-33441
P0tia
2003-08-21 11:56
2003.09.11
Dbgrid и Excel


14-33728
Фикус
2003-08-25 11:17
2003.09.11
Для поднятия настроения :)))))


7-33825
Vladislav
2003-06-27 13:33
2003.09.11
Какие права у текущего пользователя?


1-33567
Support1
2003-08-28 19:23
2003.09.11
- Проблема с компонентом