![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранени Таблицы в .txt [D7, Paradox]
anubis © (2006-03-09 11:54:00)Уважаемые мастера подскажите пожалуста как Сохранить таблицу в формате .txt или перенести её в Memo только чтоб она была как таблица а не как сбор слов.
Заранее благодарен
Виталий Панасенко (2006-03-09 14:50:00) [1]
> msguns © (09.03.06 12:16) [7]
> >Sergey13 © (09.03.06 12:14) [6]
> >С помощью генераторов отчетов. Например КвикРепорт, ФастРепорт
> и т.п.
>
> Quick - отстой, Fast - платный. А, главное, оба требуют
> конструирования отчетов, что для универсальной технологии
> выгрузки любых таблиц неприемлимо.
Универсальное всегда уступает специализированному
msguns (2006-03-09 14:35:00) [2]Поправка:
Строки "пролога" о именах полей-колонках эксель-листа не принимать во внимание.
msguns (2006-03-09 14:17:00) [3]
uses
ComObj, Excel2000, OleServer, DB, Variants;
procedure XLExp_DataSetExport(Range: OleVariant; DataSet: TDataSet);
// Експорт данных из датасета в Excel-лист
// Область листа (Range) задается параметром Range
// Range задает область листа (непрерывная последовательность ячеек листа)
// начиная с которой будет итти заполнение из НД. При этом самой левой колонкой
// может любая колонка листа, а строкой - любая строка листа.
// Ячейки этой "линии" колонок должны содержать имена полей НД, данные которых
// будут помещаться в эти колонки
var
RangeLen,Column,Row,lich,i,x: integer;
ValueArray: OleVariant;
Str: string;
FieldArray: array [0..20] of string;
bm: TBookmark;
begin
// Строка начала района
Row:=XLExp_Sheet.Range[Range,EmptyParam].Row;
// Колонка начала района (левая крайняя)
Column:=XLExp_Sheet.Range[Range,EmptyParam].Column;
// Колонка конца района (правая крайняя)
RangeLen:=Column+(XLExp_Sheet.Range[Range,EmptyParam].Columns.Count-1);
// Переписать в массив FieldArray содержимое ячеек 1-й строки указанной области
// листа Excel (имена полей датасета).
// Предполагается, что их не должно быть более 21
x := 0;
for i := Column to RangeLen do
begin
Str := XLExp_Sheet.Cells.Item[Row,i].Formula; // Содержимое ячейки
Delete(Str,1,1); // Обрезаем первый (служебный) символ
FieldArray[x] := Str;
x := x+1;
end;
// Создать дин.массив размерностью RxC, где R - кол-во строк датасета,
// а C - кол-во колонок, заданное Range
ValueArray := VarArrayCreate([0,DataSet.RecordCount-1,0,XLExp_Sheet.Range[Range,EmptyParam].Columns.Count],varVariant);
lich := 0; // Индекс строки НД
// Подготовка датасета к сканированию
with DataSet do
begin
bm := GetBookmark; // Запомнить текущую запись
DisableControls;
First;
while not Eof do
begin
for i := 0 to XLExp_Sheet.Range[Range,EmptyParam].Columns.Count do
// Для каждой колонки Region определяется имя поля НД и значение
// этого поля записывается в дин.массив по адресу=индексу колонки
begin
if (FieldArray[i]<>'') then // Колонка имеет ссылку на имя поля ?
ValueArray[lich,i] := FieldByName(FieldArray[i]).AsString
else
ValueArray[lich,i] := '';
end;
lich := lich+1;
Next;
end;
EnableControls;
GotoBookmark(bm); // Вернуться в исходную (до сканирования) запись
FreeBookmark(bm);
end;
{ Выражение :
xlSheet.Range[Col[Column]+IntToStr(Row),Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)]
представляет "экселовскую" адресацию типа "A10","H17", где буква - индекс колонки, а
число-индекс строки на листе Excel.
В нативном виде (в самом Excel`е) этот регион будет = "A10:H17"
}
// Перегнать в лист Excel (Ragion) значения из массива ValueArray
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Value := ValueArray;
// Присвоить всем ячейкам региона Region цвет символов как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Font.Color := XLExp_Sheet.Range[Range,EmptyParam].Font.Color;
// Присвоить всем ячейкам региона Region цвет как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Interior.Color := XLExp_Sheet.Range[Range,EmptyParam].Interior.Color;
// Присвоить всем ячейкам региона Region рамки как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Borders.LineStyle := XLExp_Sheet.Range[Range,EmptyParam].Borders.LineStyle;
end;
msguns (2006-03-09 14:13:00) [4]Код давайте
anubis (2006-03-09 14:13:00) [5]
> Во всех случаях следует подключить модули ComObj и ActiveX
Подключил и ничего
Нет всё компилирует но ничего не показывает!
msguns (2006-03-09 14:02:00) [6]В тексте по указанной ссылке жирным по белому:
Во всех случаях следует подключить модули ComObj и ActiveX
anubis (2006-03-09 13:30:00) [7]Может это из-за того что у меня Офис 2003?
anubis (2006-03-09 13:23:00) [8]
> msguns © (09.03.06 13:19) [21]
> Где "там" и что за "ошибка" ?
>
ExcelApp :=CreateOleObject('Excel.Application');
выдаёт ошибку
[Error] Unit1.pas(45): Undeclared identifier: 'CreateOleObject'
что делать?
msguns (2006-03-09 13:19:00) [9]>anubis © (09.03.06 13:15) [20]
Где "там" и что за "ошибка" ?
У меня все работает.
anubis (2006-03-09 13:15:00) [10]
> msguns ©
извини конечно может это и не тебе надо задовать но не работает.
там ошибка.
msguns (2006-03-09 12:45:00) [11]>Sergey13 © (09.03.06 12:42) [18]
>Это подразумевает, что человек не знает, что такое генератор отчетов, и пытается таким замысловатым способом решить тривиальную проблему. 8-)
В телепаторе вклчился режим "осенило !" ?
Снимаю шляпу, галстук, ботинки.. Что там еще полагается снять в таких случаях ?
;)
Sergey13 (2006-03-09 12:42:00) [12]2[16] msguns © (09.03.06 12:36)
>Ты сабж внимательно читал ?
А ты?
>а это подразумевает что человеку нужна технология выгруза в печатаемые файла произвольной таблицы.
Это подразумевает, что человек не знает, что такое генератор отчетов, и пытается таким замысловатым способом решить тривиальную проблему. 8-)
>Что ты, что ты, Серега, разве ты можешь быть не прав ? ;)
Вот это правильно! Не спорю. 8-)
msguns (2006-03-09 12:40:00) [13]>anubis © (09.03.06 12:35) [15]
>первые аыстраеваеш нормально а потом остальные уже прыгают потому что кол. символв везде разное
Делайте через Эксель. Это самый простой из правильныхметодов. Когда получится простой вывод, учитесь работать с шаблонами экселя - ширины колонок, фонт, цвет и т.д. можно заранее выставить в шаблоне, после чего просто выгрузить туда данные таблицы. Пользователя совсем нетрудно научить самому делать шаблоны. При этом Вы навсегда избавитесь от претензий по поводу "неудобного" или "плохочитаемого/распечатываемого" отчета
msguns (2006-03-09 12:36:00) [14]>Sergey13 © (09.03.06 12:26) [12]
>В чем я не прав?
Что ты, что ты, Серега, разве ты можешь быть не прав ? ;)
Ты сабж внимательно читал ? А если да, то там не написано, что надо распечататьтаблицу. Кроме того, не сказано вообще ничего о какой-то конкретной таблице, а это подразумевает что человеку нужна технология выгруза в печатаемые файла произвольной таблицы.
Возможно, что задача стоит такая, что надо таблицу перенести на другой комп, чтобы там можно было ее "прочитать" и напечатать, возможно подправив. Тут оба твоих насоветованных репорта нервно курят в стороне (пардон, по поводу фаста беру слова назад, не спал с ним - не знаю)
anubis (2006-03-09 12:35:00) [15]первые аыстраеваеш нормально а потом остальные уже прыгают потому что кол. символв везде разное
anubis (2006-03-09 12:33:00) [16]
> Плохиш © (09.03.06 12:28) [13]
> Надо установить моноширинный шрифт (Courier).
это что такое?
оно у меня полючается не как таблица а как сБор слов
Имя Фамилия адрес
Вася Петров Там
Николай Иванов Тут
Плохиш (2006-03-09 12:28:00) [17]
> anubis © (09.03.06 12:04) [2]
> мне нужно чтоб эту таблицу можно было созранить в *.txt
> и можно было распечатать распечать. в принципе я перенёс
> её в Memo но она выглядит ужасно.
Надо установить моноширинный шрифт (Courier).
Sergey13 (2006-03-09 12:26:00) [18]2 [9] msguns © (09.03.06 12:22)
>Забудьте про [6],- там Серега не подумав ляпнул ;)
Папрашу без инсинуаций! 8-)
В чем я не прав?
anubis (2006-03-09 12:23:00) [19]Спасибо почитаю поучусь надеюсь всё получится!! :)
Sergey13 (2006-03-09 12:22:00) [20]2[7] msguns © (09.03.06 12:16)
>Quick - отстой,
Да ладно - нормальный он.
>Fast - платный.
19 убитых енотов, если мне память не изменяет, не велика плата.
>что для универсальной технологии выгрузки любых таблиц неприемлимо.
Тебе бы все универсальное! А деньги на чем зарабатывать? 8-)
2[8] anubis © (09.03.06 12:18)
> Например КвикРепорт, ФастРепорт и т.п.
Это генераторы отчетов.