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

Вниз

требуется помощь dbf excel   Найти похожие ветки 

 
de_ICER-T44   (2006-03-16 07:50) [0]

суть приколюхи такая - требуется сделать экспорт *.dbf прямо из TTable в Excel. Пробовал сделать это все на уровне ExcelApplication->ExcelWorkbook.
открыть excel получается, данные о количестве полей и столбцов в дбф имеются, заполнение экселевских строк сделать могу, не получается перевести таблицу в эксель единым массивом, построчно тоже. Посоветуйте что с этим сделать....

Далее...
Печать из dbgrid настроил, все нормально, печатает... не хватает одной вещи... если лист poLandscape, просчет уменьшения полей в печать есть, автоматическое изменение шрифта есть, но в таблице 20 столбцов, каждый по 120 символов, которые наверняка заполнены. требуется сделать печать так, чтобы все 20 столбцов входили в лист, а также ВСЕ ВВЕДЕННЫЕ СИМВОЛЫ ОСТАЛИСЬ!!!! что-то типа экселевской процедуры - уместить на 1 лист в ширину.

ответы на мыл zakat-aria@mail.ru


 
Desdechado ©   (2006-03-16 11:11) [1]

зачем экспорт?
эксель прекрасно открывает простые DBF


 
Anatoly Podgoretsky ©   (2006-03-16 12:09) [2]

Desdechado ©   (16.03.06 11:11) [1]
Сложные тоже


 
de_ICER-T44   (2006-03-17 04:19) [3]

обьясняю подробнее. юзвери - неграмотные и в первый раз видят комп. мне требуется все это сделать из своей проги.


 
de_ICER-T44   (2006-03-17 07:57) [4]

//внимание! дАЮ ИСХОДНИК ПРОЦЕДУРЫ, КОТОРАЯ ДОЛЖНА У МЕНЯ ВЫПОЛНЯТЬСЯ (ЭКСПОРТ В ЭКСЕЛЬ)
//ВСЕ ЧТО Я ХОЧУ - УКАЗАНО В ТЕКСТЕ ИСХОДНИКА

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.


 
Desdechado ©   (2006-03-17 12:00) [5]

Anatoly Podgoretsky ©   (16.03.06 12:09) [2]
Я написал осторожно, ибо для правильного открытия DBF в экселе должны быть установлены соответсвующие драйверы.
А т.к. DBF - слабоспецифицированный формат, то может наступить облом даже с правильными драйверами.
Я, например, создавал в клиппере файлы с символьными полями (не мемо) длиной более 255 символов. Ни один на тот момент известный просмотрщик/редактор DBF их не мог переварить. А клиппер прекрасно с ними работал. Вот так.

ps а автор, наверно, мазохист
пользователей бы лучше научил экселем пользоваться
а вообще есть такие, которые любого программера научат


 
de_ICER-T44   (2006-03-27 03:19) [6]


> ps а автор, наверно, мазохист
> пользователей бы лучше научил экселем пользоваться
> а вообще есть такие, которые любого программера научат

на эту тему - я бы вам посоветовал приехать к нам и обучить 1500 юзверей пользоваться экселем:)))) хех:)))) причем, абсолютно бесплатно, чтобы программу не писать:))))

так и скажите, что мозгов не хватает....


 
anubis ©   (2006-03-27 07:09) [7]

На корелефтве делфи поищи там есть решение твоей проблемы


 
ASoft   (2006-03-27 07:52) [8]

> de_ICER-T44
А что, приравнять элементам массива значения из Table1 в цикле
> for i:=1 to ColStrok do
> for J := 1 to ColStolb do

не получается?


 
Anatoly Podgoretsky ©   (2006-03-27 09:23) [9]

Desdechado ©   (17.03.06 12:00) [5]
Со спецификацией все нормально, каждый производитель имеет свою спецификацию. Клиппер имеет строковые поля до 64 кб длиной. Естественно, что этот формат понимает только Клиппер.


 
Anatoly Podgoretsky ©   (2006-03-27 09:25) [10]

de_ICER-T44   (27.03.06 03:19) [6]
Конечно не хватает, ведь у учителей совсем другие мозги, направленые на обучение, а не на оправдание. Так что учить пользоваться Экселем, это самый дешевый и в тоже время самый эффективный путь.


 
SpellCaster   (2006-03-27 13:48) [11]

Как насчёт
WorkBook.WorkSheets[1].Cells[Stroka, Stolbec].Text:=Table1.FieldByName["field"].AsString?


 
de_ICER-T44   (2006-03-29 09:55) [12]


> SpellCaster   (27.03.06 13:48) [11]
> Как насчёт
> WorkBook.WorkSheets[1].Cells[Stroka, Stolbec].Text:=Table1.
> FieldByName["field"].AsString?


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



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

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

Наверх




Память: 0.5 MB
Время: 0.049 c
2-1144048007
Mozaika_81
2006-04-03 11:06
2006.04.16
Как работать с адресом?


2-1144052417
Sania
2006-04-03 12:20
2006.04.16
Вопрос по screenshot ам


2-1143722555
Колобок
2006-03-30 16:42
2006.04.16
TFileStream


2-1144234595
Alex_C
2006-04-05 14:56
2006.04.16
Как передать фокус чужому приложению?


15-1143053426
Зм1й
2006-03-22 21:50
2006.04.16
Xp Home