Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2014, 10:50   #1
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию Вывод полей в Excel, делфи

Есть БД Аксес в ней таблица с несколькими полями, как сделать так, чтоб одно из полей не отображалось при выводе в excel или вообще не выводилось.

Вот как у меня происходит выборка в Excel.

Код:
// Заполняем массив
   ADOQuery2.First;i:=2;
   while not ADOQuery2.Eof do
      begin
         for j:=2 to ADOquery2.fields.count do
  Fdata[i, j-1]:=ADOQuery2.Fields[j-1].Value;
         ADOQuery2.Next;i:=i+1;
      end;


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.10.2014 в 11:18.
sdr1 вне форума Ответить с цитированием
Старый 17.10.2014, 11:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрите, какие номера (индексы) имеют поля, которые выводить не нужно. Их и исключите.

напримре, так:
Код:
// Заполняем массив
   ADOQuery2.First;
   i:=2;
   while not ADOQuery2.Eof do
      begin
         k := 0;
         for j:=1 to ADOquery2.fields.Сount - 1 do
            if not j  in [5,7] then  {исключаем поля с номерами 5 и 7}
            begin
                inc(k);
                Fdata[i, k] := ADOQuery2.Fields[j].Value;
            end;
         ADOQuery2.Next;
         i:=i+1;
      end;
идея понятна?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2014, 11:40   #3
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Вот на этой строке
Код:
 for j:=1 to ADOquery2.fields.Сount - 1 do
выдает ошибку
Код:
 sotr.pas(268): Illegal character in input file: 'C;' ($D1)
Все убрал ошибку ну при таком раскладе мне вообще таблицу пустую выдает

Последний раз редактировалось Stilet; 17.10.2014 в 18:35.
sdr1 вне форума Ответить с цитированием
Старый 17.10.2014, 11:52   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

извите, я русскую букву случайно вставил.
замените на такой код:
Код:
for j:=1 to ADOquery2.fields.Count - 1 do
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2014, 11:53   #5
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Вот полный код вывода
Код:
procedure TForm_sotr.Button4Click(Sender: TObject);
Var Excel, FData: Variant;
    i,j,k:integer;

begin
// Äàííûå â ADOQuery2 äî ýòîãî ìîìåíòà ñ÷èòàåì óæå ñôîðìèðîâàííûìè
// Ñîçäàåì íîâóþ êîïèþ Excel
   Excel := CreateOleObject('Excel.Application');

// Äîáàâëÿåì ðàáî÷óþ êíèãó
   Excel.Workbooks.Add;

// Óñòàíàâëèâàåì ðàçìåð ìàññèâà ñ äàííûìè äëÿ ýêñïîðòà
   FData:=VarArrayCreate([1,ADOquery2.RecordCount+1,1,ADOquery2.Fields.Count],varVariant);

// ïåðâóþ ñòðîêó çàïîëíÿåì íàçâàíèÿìè ñòîëáöîâ
   for j:=2 to ADOquery2.Fields.Count do
      FData[1,j-1]:=ADOquery2.Fields[j-1].DisplayName;

// Çàïîëíÿåì ìàññèâ
   ADOQuery2.First;
   i:=2;
   while not ADOQuery2.Eof do
      begin
         k := 0;
         for j:=1 to ADOquery2.fields.Count - 1 do
            if not j  in [4] then  {èñêëþ÷àåì ïîëÿ ñ íîìåðàìè 4}
            begin
                inc(k);
                Fdata[i, k] := ADOQuery2.Fields[j].Value;
            end;
         ADOQuery2.Next;
         i:=i+1;
      end;

// Êîïèðóåì äàííûå â Excel
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[ADOQuery2.RecordCount+1, ADOQuery2.Fields.Count]].Value:=FData;

// Ðèñóåì ãðàíèöû âîêðóã äàííûõ
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[ADOQuery2.RecordCount+1, ADOQuery2.Fields.Count]].Select;
   Excel.Selection.Borders.LineStyle := 1;
   Excel.Selection.Borders.Weight := 2;
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, 1]].Select;

// Ìåíÿåì öâåò ÿ÷ååê â ïåðâîé ñòðîêå (íàçâàíèÿ ñòîáëöîâ)
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, ADOQuery2.Fields.Count]].Interior.ColorIndex:=16;

// Àâòîìàòè÷åñêè èçìåíÿåì øèðèíó ñòîëáöîâ è äåëàåì Excel âèäèìûì
   Excel.Columns.AutoFit;
   Excel.Visible:=True;

end;

end.
sdr1 вне форума Ответить с цитированием
Старый 17.10.2014, 12:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
// Êîïèðóåì äàííûå â
перед копированием рекомендую включать русскую расскладку клавиатуры, тогда не будет этого ужаса, будет нормальный русский текст.

попробуйте изменить ВЕЗДЕ количество копируемых данных.

вот так:
Код:
begin
// Äàííûå â ADOQuery2 äî ýòîãî ìîìåíòà ñ÷èòàåì óæå ñôîðìèðîâàííûìè
// Ñîçäàåì íîâóþ êîïèþ Excel
   Excel := CreateOleObject('Excel.Application');

// Äîáàâëÿåì ðàáî÷óþ êíèãó
   Excel.Workbooks.Add;

// Óñòàíàâëèâàåì ðàçìåð ìàññèâà ñ äàííûìè äëÿ ýêñïîðòà
   FData:=VarArrayCreate([1,ADOquery2.RecordCount+1,1,ADOquery2.Fields.Count-1],varVariant);

// ïåðâóþ ñòðîêó çàïîëíÿåì íàçâàíèÿìè ñòîëáöîâ
   for j:=1 to ADOquery2.Fields.Count-1 do
     k := 0;
     if not j  in [4] then  {èñêëþ÷àåì ïîëÿ ñ íîìåðàìè 4}
     begin
        inc(k);
        FData[1,k]:=ADOquery2.Fields[j].DisplayName;
     end; 


// Çàïîëíÿåì ìàññèâ
   ADOQuery2.First;
   i:=2;
   while not ADOQuery2.Eof do
      begin
         k := 0;
         for j:=1 to ADOquery2.fields.Count - 1 do
            if not j  in [4] then  {èñêëþ÷àåì ïîëÿ ñ íîìåðàìè 4}
            begin
                inc(k);
                Fdata[i, k] := ADOQuery2.Fields[j].Value;
            end;
         ADOQuery2.Next;
         i:=i+1;
      end;

// Êîïèðóåì äàííûå â Excel
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[ADOQuery2.RecordCount+1, ADOQuery2.Fields.Count-1]].Value:=FData;

// Ðèñóåì ãðàíèöû âîêðóã äàííûõ
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[ADOQuery2.RecordCount+1, ADOQuery2.Fields.Count-1]].Select;
   Excel.Selection.Borders.LineStyle := 1;
   Excel.Selection.Borders.Weight := 2;
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, 1]].Select;

// Ìåíÿåì öâåò ÿ÷ååê â ïåðâîé ñòðîêå (íàçâàíèÿ ñòîáëöîâ)
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, ADOQuery2.Fields.Count-1]].Interior.ColorIndex:=16;

// Àâòîìàòè÷åñêè èçìåíÿåì øèðèíó ñòîëáöîâ è äåëàåì Excel âèäèìûì
   Excel.Columns.AutoFit;
   Excel.Visible:=True;

end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2014, 14:37   #7
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Код HTML:
попробуйте изменить ВЕЗДЕ количество копируемых данных.

ничего не изменилось таблица пустая
sdr1 вне форума Ответить с цитированием
Старый 17.10.2014, 15:03   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
таблица пустая
вот так понятно ?

Код:
uses
             ComObj,
Код:
procedure TMain.BitBtn2Click(Sender: TObject);
begin
   // Данные в ADOQuery1 до этого момента считаем уже сформированными
  // Создаем новую копию Excel
   Excel:=CreateOleObject('Excel.Application');

 // Добавляем рабочую книгу
   Excel.Workbooks.Add;

    // Даём название страничке
    Excel.WorkBooks[1].WorkSheets[1].Name := 'Прайс лист';

    // ---------------------Цвет поля -------------------
  //  Excel.SetRangecolor('1','A1',15);
  //--------------------------------------------

   // Иногда полезно уметь установить и ориентацию страницы
    Excel.ActiveSheet.PageSetup.Orientation:= 2;
   //---------------------------------------------------
   /// Левое и правое поля отступа для печати
   Excel.WorkBooks[1].WorkSheets[1].PageSetup.LeftMargin := 20; // 
   Excel.WorkBooks[1].WorkSheets[1].PageSetup.RightMargin := 10;
   //----------------------------------------------------------------------------

  // Устанавливаем размер массива с данными для экспорта
   FData:=VarArrayCreate([1,Module.OrderQuery.RecordCount+1,1,Module.OrderQuery.Fields.Count],varVariant);


 // первую строку заполняем названиями столбцов
   for j:=1 to Module.OrderQuery.Fields.Count do
      FData[1,j]:= Module.OrderQuery.Fields[j-1].DisplayName;

 // Заполняем массив
   Module.OrderQuery.First;
   i:=2;
   while not Module.OrderQuery.Eof do
      begin
         for j:=1 to Module.OrderQuery.Fields.Count do
            FData[i,j]:=Module.OrderQuery.Fields[j-1].Value;
         Module.OrderQuery.Next;i:=i+1;
      end;

 // Копируем данные в Excel
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[Module.OrderQuery.RecordCount+1, Module.OrderQuery.Fields.Count]].Value:=FData;

 // Рисуем границы вокруг данных


   Excel.Range[Excel.Cells[1, 1], Excel.Cells[Module.OrderQuery.RecordCount+1, Module.OrderQuery.Fields.Count]].Select;
   Excel.Selection.Borders.LineStyle := 1;
   Excel.Selection.Borders.Weight := 2;
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, 1]].Select;



// Меняем цвет ячеек в первой строке (названия стоблцов)
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, Module.OrderQuery.Fields.Count]].Interior.ColorIndex:=15;

// Автоматически изменяем ширину столбцов и делаем Excel видимым
   Excel.Columns.AutoFit;
   Excel.Visible:=True;
end;
end.

Последний раз редактировалось xxbesoxx; 17.10.2014 в 15:06.
xxbesoxx вне форума Ответить с цитированием
Старый 20.10.2014, 16:13   #9
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
вот так понятно ?

Код:
uses
             ComObj,
Код:
procedure TMain.BitBtn2Click(Sender: TObject);
begin
   // Данные в ADOQuery1 до этого момента считаем уже сформированными
  // Создаем новую копию Excel
   Excel:=CreateOleObject('Excel.Application');

 // Добавляем рабочую книгу
   Excel.Workbooks.Add;

    // Даём название страничке
    Excel.WorkBooks[1].WorkSheets[1].Name := 'Прайс лист';

    // ---------------------Цвет поля -------------------
  //  Excel.SetRangecolor('1','A1',15);
  //--------------------------------------------

   // Иногда полезно уметь установить и ориентацию страницы
    Excel.ActiveSheet.PageSetup.Orientation:= 2;
   //---------------------------------------------------
   /// Левое и правое поля отступа для печати
   Excel.WorkBooks[1].WorkSheets[1].PageSetup.LeftMargin := 20; // 
   Excel.WorkBooks[1].WorkSheets[1].PageSetup.RightMargin := 10;
   //----------------------------------------------------------------------------

  // Устанавливаем размер массива с данными для экспорта
   FData:=VarArrayCreate([1,Module.OrderQuery.RecordCount+1,1,Module.OrderQuery.Fields.Count],varVariant);


 // первую строку заполняем названиями столбцов
   for j:=1 to Module.OrderQuery.Fields.Count do
      FData[1,j]:= Module.OrderQuery.Fields[j-1].DisplayName;

 // Заполняем массив
   Module.OrderQuery.First;
   i:=2;
   while not Module.OrderQuery.Eof do
      begin
         for j:=1 to Module.OrderQuery.Fields.Count do
            FData[i,j]:=Module.OrderQuery.Fields[j-1].Value;
         Module.OrderQuery.Next;i:=i+1;
      end;

 // Копируем данные в Excel
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[Module.OrderQuery.RecordCount+1, Module.OrderQuery.Fields.Count]].Value:=FData;

 // Рисуем границы вокруг данных


   Excel.Range[Excel.Cells[1, 1], Excel.Cells[Module.OrderQuery.RecordCount+1, Module.OrderQuery.Fields.Count]].Select;
   Excel.Selection.Borders.LineStyle := 1;
   Excel.Selection.Borders.Weight := 2;
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, 1]].Select;



// Меняем цвет ячеек в первой строке (названия стоблцов)
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, Module.OrderQuery.Fields.Count]].Interior.ColorIndex:=15;

// Автоматически изменяем ширину столбцов и делаем Excel видимым
   Excel.Columns.AutoFit;
   Excel.Visible:=True;
end;
end.
ошибка Undeclared identifier: 'Module'

Как объявить идентификатор?
sdr1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод значений полей таблицы в текстовые поля Умагаджи SQL, базы данных 2 27.08.2012 22:58
связывание полей таблиц в делфи DAEMON1511 БД в Delphi 4 17.10.2011 11:34
вывод полей класса после сравнения С++ zhenya.ya Помощь студентам 3 24.05.2011 14:22
вывод полей из двух таблиц 6666 БД в Delphi 2 12.05.2011 15:33
вывод полей из двух таблиц 6666 Мультимедиа в Delphi 1 11.05.2011 20:01