![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
требуется помощь dbf excel [D6, dBase, FoxPro, Excel]
de_ICER-T44 © (2006-03-16 07:50:00)суть приколюхи такая - требуется сделать экспорт *.dbf прямо из TTable в Excel. Пробовал сделать это все на уровне ExcelApplication->ExcelWorkbook.
открыть excel получается, данные о количестве полей и столбцов в дбф имеются, заполнение экселевских строк сделать могу, не получается перевести таблицу в эксель единым массивом, построчно тоже. Посоветуйте что с этим сделать....
Далее...
Печать из dbgrid настроил, все нормально, печатает... не хватает одной вещи... если лист poLandscape, просчет уменьшения полей в печать есть, автоматическое изменение шрифта есть, но в таблице 20 столбцов, каждый по 120 символов, которые наверняка заполнены. требуется сделать печать так, чтобы все 20 столбцов входили в лист, а также ВСЕ ВВЕДЕННЫЕ СИМВОЛЫ ОСТАЛИСЬ!!!! что-то типа экселевской процедуры - уместить на 1 лист в ширину.
ответы на мыл zakat-aria@mail.ru
de_ICER-T44 (2006-03-29 09:55:00) [1]
> SpellCaster (27.03.06 13:48) [11]
> Как насчёт
> WorkBook.WorkSheets[1].Cells[Stroka, Stolbec].Text:=Table1.
> FieldByName['field'].AsString?
хмм... сомнительно... попробуем.... ток чуть позже, сейчас у меня запарка на неделю
SpellCaster (2006-03-27 13:48:00) [2]Как насчёт
WorkBook.WorkSheets[1].Cells[Stroka, Stolbec].Text:=Table1.FieldByName['field'].AsString?
Anatoly Podgoretsky (2006-03-27 09:25:00) [3]de_ICER-T44 (27.03.06 03:19) [6]
Конечно не хватает, ведь у учителей совсем другие мозги, направленые на обучение, а не на оправдание. Так что учить пользоваться Экселем, это самый дешевый и в тоже время самый эффективный путь.
Anatoly Podgoretsky (2006-03-27 09:23:00) [4]Desdechado © (17.03.06 12:00) [5]
Со спецификацией все нормально, каждый производитель имеет свою спецификацию. Клиппер имеет строковые поля до 64 кб длиной. Естественно, что этот формат понимает только Клиппер.
ASoft (2006-03-27 07:52:00) [5]> de_ICER-T44
А что, приравнять элементам массива значения из Table1 в цикле
> for i:=1 to ColStrok do
> for J := 1 to ColStolb do
не получается?
anubis (2006-03-27 07:09:00) [6]На корелефтве делфи поищи там есть решение твоей проблемы
de_ICER-T44 (2006-03-27 03:19:00) [7]
> ps а автор, наверно, мазохист
> пользователей бы лучше научил экселем пользоваться
> а вообще есть такие, которые любого программера научат
на эту тему - я бы вам посоветовал приехать к нам и обучить 1500 юзверей пользоваться экселем:)))) хех:)))) причем, абсолютно бесплатно, чтобы программу не писать:))))
так и скажите, что мозгов не хватает....
Desdechado (2006-03-17 12:00:00) [8]Anatoly Podgoretsky © (16.03.06 12:09) [2]
Я написал осторожно, ибо для правильного открытия DBF в экселе должны быть установлены соответсвующие драйверы.
А т.к. DBF - слабоспецифицированный формат, то может наступить облом даже с правильными драйверами.
Я, например, создавал в клиппере файлы с символьными полями (не мемо) длиной более 255 символов. Ни один на тот момент известный просмотрщик/редактор DBF их не мог переварить. А клиппер прекрасно с ними работал. Вот так.
ps а автор, наверно, мазохист
пользователей бы лучше научил экселем пользоваться
а вообще есть такие, которые любого программера научат
de_ICER-T44 (2006-03-17 07:57:00) [9]//внимание! дАЮ ИСХОДНИК ПРОЦЕДУРЫ, КОТОРАЯ ДОЛЖНА У МЕНЯ ВЫПОЛНЯТЬСЯ (ЭКСПОРТ В ЭКСЕЛЬ)
//ВСЕ ЧТО Я ХОЧУ - УКАЗАНО В ТЕКСТЕ ИСХОДНИКА
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, OleServer, Excel2000, DBTables, DB;
type
TForm1 = class(TForm)
Table1: TTable; //активная таблица с сессией
Session1: TSession;
ExcelApp: TExcelApplication; // это думаю и так всем понятно, server
Timer1: TTimer; // таймер поставил для выполнения события, хотя можно было и по form1.onshow
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// table настроен на c:\1\1.dbf
// процедурой winexec('excel "c:\1\1.dbf"',SW_SHOWNORMAL);
// пользоваться никакого желания не имею
// обращаю внимание на то, что в таблице - 20 столбцов, в каждом столбце ширина - 120 символов, т.е.
// сюда можно приделать еще изменение столбцов экселя(автоматически под количество введенных символов).
// кстати, в таблице, которой я пользуюсь значение table1.recordcount=16401 и будет увеличиваться
// каждый месяц на 500-1000 записей. хотелось бы не ждать 2 часа вывода записей.
procedure TForm1.Timer1Timer(Sender: TObject);
var
Workbook, Range, Cell1, Cell2, ArrayData, a : Variant;
Stolbec, Stroka, i, j : integer;
ColStrok, ColStolb : integer;
begin
//координаты левого верхнего угла экселя
Stolbec := 1;
Stroka := 5;
//размеры массива данных
ColStrok := table1.RecordCount;
ColStolb := table1.FieldCount;
ExcelApp.Application.EnableEvents := false;
Workbook := ExcelApp.WorkBooks.Add('c:\1\1.xls',0);
//массив, в который мы кидаем данные
ArrayData := VarArrayCreate([1, ColStrok, 1, ColStolb], varVariant);
//нужно заполнить массив.... КАКИМ ОБРАЗОМ СЮДА ЗАПИХАТЬ ДАННЫЕ ТАБЛИЦЫ???
for i:=1 to ColStrok do
for J := 1 to ColStolb do
//ЧТО ДОЛЖНО БЫТЬ ТУТ?????
ARRAYDATA
//определяем первичную ячейку области, в которую будем выводить данные
Cell1 := WorkBook.WorkSheets[1].Cells[Stroka, Stolbec];
//определяем вторичную ячейку области, в которую будем выводить данные
Cell2 := WorkBook.WorkSheets[1].Cells[Stroka + ColStrok - 1, Stolbec +
ColStolb - 1];
Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
Range.Value := ArrayData;
ExcelApp.Visible[0] := true;
Application.Terminate;
end;
end.
de_ICER-T44 (2006-03-17 04:19:00) [10]обьясняю подробнее. юзвери - неграмотные и в первый раз видят комп. мне требуется все это сделать из своей проги.
Anatoly Podgoretsky (2006-03-16 12:09:00) [11]Desdechado © (16.03.06 11:11) [1]
Сложные тоже
Desdechado (2006-03-16 11:11:00) [12]зачем экспорт?
эксель прекрасно открывает простые DBF