Текущий архив: 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.48 MB
Время: 0.01 c