Форум: "Начинающим";
Текущий архив: 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.041 c