Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

требуется помощь 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
9-1128171842
Ibrox
2005-10-01 17:04
2006.04.16
OpenGL


2-1143875943
tort
2006-04-01 11:19
2006.04.16
Почему окно вылезает два и более раз?


2-1142484602
de_ICER-T44
2006-03-16 07:50
2006.04.16
требуется помощь dbf excel


2-1143782019
Рафик
2006-03-31 09:13
2006.04.16
Char в Integer


15-1143260981
Чародей
2006-03-25 07:29
2006.04.16
Поиск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский