Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранени Таблицы в .txt [D7, Paradox]


Страницы:   1 2

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)
>  Например КвикРепорт, ФастРепорт и т.п.
Это генераторы отчетов.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо