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

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

Правильный импорт данных из Экселя


Страницы:   1 2 3

Doctordradd ©   (2010-11-02 18:37:00) 

Подскажите, пожалуйста, как правильно импортировать данные из таблицы Эксель. Экспорт работает отлично, при импорте открывается файл экселя, записывается временно 1 колонка, при закрытии программы записанные данные исчезают.
Записываются только в готовую строку, т.е. в программу введены вручную данные, в эти строки вписываются данные с экселя, в пустые же - нет...
Подскажите, пожалуйста, где ошибка.
Спасибо.

Экспорт правильный:
var ws,xl:variant;
   i,maxrow:integer;
   col,fst:integer;
begin
 fst:=2;
 xl:=createoleobject('Excel.Application');
   try
     maxrow:=0;
     xl.visible:=true;
     XL.WorkBooks.Add;
     ws := XL.ActiveWorkBook.ActiveSheet;
     ws.Range['A1'].NumberFormat:='0';

     ws.Range['A'+inttostr(fst)].Value := '№';
     ws.Range['B'+inttostr(fst)].Value := 'Nombres';
     col:=1;
begin
        inc(col);
        ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
     end;
begin
        inc(col);
        ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
     end;
begin
        inc(col);
        ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
     end;
begin
        inc(col);
        ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
     end;
begin
        inc(col);
        ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
     end;

     for i:=fst+1 to Visitas.Items.Count+fst do begin
        col:=1;
        ws.Range['a'+inttostr(i)].Value := i-2;//# работы
        ws.Range['b'+inttostr(i)].Value := Visitas.Items[i-fst-1].Caption;
begin
           inc(col);
           ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[0];
        end;
begin
           inc(col);
           ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[1];
        end;
begin
           inc(col);
           ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[2];
        end;
begin
           inc(col);
           ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[3];
        end;
        begin
           inc(col);
           ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[4];
        end;
        maxrow:=i;
     end;

Импорт с ошибкой:
var ws,xl:variant;
   i,maxrow:integer;
   col,fst:integer;
begin
 fst:=7;
 xl:=createoleobject('Excel.Application');
   try
     maxrow:=0;
     xl.visible:=true;
     XL.WorkBooks.open('PRESENTES');
     ws := XL.ActiveWorkBook.ActiveSheet;
     ws.Range['A1'].NumberFormat:='0';

      for i:=fst+1 to Visitas.Items.Count+fst do begin
        col:=1;
        Visitas.Items[i-fst-1].SubItems[0]:= ws.Range['A'+inttostr(fst)].Value;
        Visitas.Items[i-fst-1].SubItems[1] := ws.Range['B'+inttostr(fst)].Value;
        maxrow:=i;


Anatoly Podgoretsky   (2010-11-10 11:44:00) [1]

> Dennis I. Komarov  (10.11.2010 09:37:44)  [44]

А без разницы сколько будет, главное можно.


Dennis I. Komarov   (2010-11-10 09:37:00) [2]


> Сможет делать такое 1 + '"1"'

Будет ''3''''...


Anatoly Podgoretsky   (2010-11-10 09:16:00) [3]

> sniknik  (09.11.2010 23:43:42)  [42]

Сможет делать такое 1 + '"1"'


sniknik   (2010-11-09 23:43:00) [4]

> язык не русский
оу!!! еще и юникод "всплывет". :о), к слову о "простом тз.".

> другим пользователям
вообще то сайт программистский. проблемы с теми кто считает, что им можно попользоваться не являясь таковым.

> могут столкнуться с подобной проблемой
какой проблемой то? это вы так шутите? с какой поры не объявленная переменная - проблема?
просто у вас знаний "ниже плинтуса" по программированию. даже только начинающий должен знать, что переменные в дельфи объявляют перед использованием (и это хорошо, представляю что было бы если использовался язык с автоопределением, по месту... никаких ошибок компиляции, программа работает но ничего не делает/делает не то. и поди объясни, что "у тебя где то там ошибка", "но ведь компилится!", а на то что азык и незнание сделали из явной ошибки логическую, плевать.).


Doctordradd   (2010-11-09 22:15:00) [5]

Прицениваюсь.
Потому как нужна эта программа, делать заново это много работы, язык не русский, переводить-то мне совсем не проблема, проблема вписывать все сызнова.
Что необходимо, это настроить импорт с экселя и копирование строки из одной группы в другую. Пока это такое Т.З.
Цель топика была настроить импорт, в итоге 3 страницы помощи ничем не помогли мне по крайней мере, но в моем понимании форумы для помощи и другим пользователям, которые могут столкнуться с подобной проблемой, что ж, будем надеяться что очень поможет другим...
Спасибо за приятное собеседование, если кому-то интересно за деньги помочь - добро пожаловать.


sniknik   (2010-11-09 21:33:00) [6]

> Т.З. простое было б:
простое тз. это то где все досконально расписано, так чтобы не было неоднозначных толкований (которые обычно после пытаются интерпретировать в пользу заказчика).
а твоя "писулька" не иначе как "вызов Шерлок Холмсу", вот что такое "лишнее в коде базы данных"??? в базах данных вообще то нет кода, и т.д.

вообще совет, не надо в тз. пытаться расписывать что делать, пиши что хочешь получить... ты же вот таксисту не говоришь - "крутите руль влево на 30 градусов, после поворота жмите педаль тормоза, после светофора держите машину прямо...", ты просто говоришь куда тебе надо.

> Ты еще и деньги хочешь получать :-)
не, он приценивается, чтобы не переплатить... (хотя место выбрал не удачное, ссылки где этим занимаются проигнорировал).


Anatoly Podgoretsky   (2010-11-09 18:58:00) [7]

> Doctordradd  (09.11.2010 18:27:38)  [38]

Ты еще и деньги хочешь получать :-)


Doctordradd   (2010-11-09 18:27:00) [8]

Ошибок выдало несколько, несовместимы типы, не обьявлена переменная...

Т.З. простое было б:
Почистить только необходимо лишнее в коде базы данных, настроить импорт Экселя, настроить копирование строк(при попытке копировать они как бы вырезаются).
Сколько б могла стоить работа?


sniknik   (2010-11-09 17:53:00) [9]

> Попробовал Sec[0] в коде импорта, не выходит...
так и пишет? не выхожу мол... вообще ошибки это первое на что должен учится обращать внимание программист, т.к. в них часто написана причина...

у тебя там еще один глюк, раз уж ini  файл, то там вроде как нет перекрытых методов с вариантным параметром, а автоприведение... ну может не срабатывает. не скажу без ошибки от действия.

> Обидно сдаваться теперь, 2 недели пытаюсь решить задачу...
через 2 месяца будет еще более обидно, при том же состоянии дел. учится на программиста вы же не хотите...


Dennis I. Komarov   (2010-11-09 16:20:00) [10]

Хорошего из этого ничего не получится. Если для баловства, то пожалуйста, развлекайтесь сколько угодно. А если для дела, то извините, любой хороший продукт стоит хороших денег. А чтобы продукт был хороший... и т.д.


Doctordradd   (2010-11-09 15:55:00) [11]


> Сохранение содержимого документа Excel в ini-файл вам дьявол
> подсказал, не иначе.

В куда ж его еще можно сохранить?


> здесь секция вполне определена. а на "записи" нет.

Попробовал Sec[0] в коде импорта, не выходит...


> а вообще, честно, вижу такое наплевательское "да че там
> делать то?" только от от тех, кто в процессе не разбирается,
>  и сам не умеет, или так сказать "умеет издалека"

То что не умею издалека, может и моя вина, что другим наукам учился, но Вы не думайте, что я сижу вот и жду, поплевывая на экран...согласен, не знаю абсолютно и наугад уже изменяю этот код, но все же пытаюсь...


> Да, если все-таки самодеятельность надоест, составляйте
> Т.З. и...

Обидно сдаваться теперь, 2 недели пытаюсь решить задачу...


Dennis I. Komarov   (2010-11-09 13:33:00) [12]


> я б заплатил вобщем-то раз помочь никак...

Да, если все-таки самодеятельность надоест, составляйте Т.З. и...


Dennis I. Komarov   (2010-11-09 13:20:00) [13]


> а вообще, честно, вижу такое наплевательское "да че там
> делать то?" только от от тех, кто в процессе не разбирается,
>  и сам не умеет, или так сказать "умеет издалека". и это
> неважно к чему относится, в любой области можно применить.

Вот так привезут человека с аппендицитом, а там Виктор Михайлович Полесов - да чего тут делать, зыж самая простая операция - раз и все...


Andy BitOff   (2010-11-09 10:05:00) [14]


> Doctordradd   (09.11.10 08:46) [29]
> это и есть запись?

Какая же это запись? Написано же ReadString, т.е. берем гугл и получаем "Читайте String" (с)translate.google.com
Читайте! А не пишите.


sniknik   (2010-11-09 09:54:00) [15]

> я вот как раз машинки сам себе подключал...
думаешь я сам не мог? но пришлось бы ехать в магазин подбирать/наращивать шланг, делать врезку (откуда то брать сварку? с умением не проблема, у меня даже есть корочки сварщика, устаревшие правда, получил на повышении квалификации (владение смежными дает/давало бонус на предприятии), еще до института/армии...), и т.д. провозился бы не одну неделю, а так все решилось за пол часа, + саму машинку затащили на 5 этаж без меня... ++ если бы мне пришлось (а мне бы пришлось) из-за этого брать отгул, то потерял бы я больше чем эти 3 тысячи (кстати вы не теряете занимаясь не своим делом вместо своей работы?).

а вообще, честно, вижу такое наплевательское "да че там делать то?" только от от тех, кто в процессе не разбирается, и сам не умеет, или так сказать "умеет издалека". и это неважно к чему относится, в любой области можно применить.


sniknik   (2010-11-09 09:40:00) [16]

> ini.ReadSections(sec)
значит все таки ini...
Германн ©   (05.11.10 02:51) [15]
> Сохранение содержимого документа Excel в ini-файл вам дьявол подсказал, не иначе.

но... ваше дело конечно, как и будущие проблемы.

> Visitas.Items[i].SubItems.Add( Ini.ReadString(Sec[i],'n1',''));
ну и что же вы врете, что "аналогично только запись"? здесь секция вполне определена. а на "записи" нет.


Doctordradd   (2010-11-09 08:46:00) [17]

я б заплатил вобщем-то раз помочь никак...

3 тысячи, да, рыбка золотая, я вот как раз машинки сам себе подключал...

Вот может быть это поможет помочь? это добавление итемсов в main файле...это и есть запись? или снова не то?
procedure LoadGroupVisitas(Const Groupname:string);
var i,cur:integer;
    sec:tstringlist;
begin
BaseVisitas.Visitas.OnChange:=nil;
sec:=tstringlist.Create;
with BaseVisitas do begin
  Visitas.Clear;
  try
    ini.ReadSections(sec);
    status.panels[1].text:=' Total Visitas : '+inttostr(sec.Count);
    if groups.ItemIndex=0 then begin
       for i:=0 to sec.Count-1 do begin
         Visitas.Items.Add.Caption:=Sec[i];
         Visitas.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n1',''));
         Visitas.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n2',''));
         Visitas.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n3',''));
         Visitas.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n4',''));
         Visitas.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n5',''));
         Visitas.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n6',''));
       end;
     end;
     if groups.itemindex>0 then begin
       for i:=0 to  sec.Count-1 do begin
         if ini.readstring(sec[i],'n7','')=GroupName then begin
             cur:=Visitas.Items.Add.Index;
             Visitas.items[cur].Caption:=sec[i];
             Visitas.items[cur].SubItems.Add(ini.readstring(sec[i],'n1',''));
             Visitas.items[cur].SubItems.Add(ini.readstring(sec[i],'n2',''));
             Visitas.items[cur].SubItems.Add(ini.readstring(sec[i],'n3',''));
             Visitas.items[cur].SubItems.Add(ini.readstring(sec[i],'n4',''));
             Visitas.items[cur].SubItems.Add(ini.readstring(sec[i],'n5',''));
             Visitas.items[cur].SubItems.Add(ini.readstring(sec[i],'n6',''));
         end;
       end;
     end;


sniknik   (2010-11-09 08:20:00) [18]

> вижу что идет текст, как в колонки, в строчки его писать???
а вам как надо? эксель - таблица (если брать 1 лист), сохранение пишет аналогично просто в другой формат (стандартный кстати).

> обьясните понятнее где ошибка и как исправить
понятнее... ошибки НЕТ. здесь нет. так как то что вы показываете не содержит в одном случае чтения из файла(аналогию по "делаю также но наоборот" не провести), в другом записи (на что жалоба). есть название метода неизвестно какого объекта. причем название абсолютно верное (иначе бы справка не нашла соответствий), с параметрами сложнее, они разные у каждого (не, ну на самом деле у кого то могут совпадать, не суть). впрочем несоответствие типов дало бы ошибку... стойте, так у нас и есть ошибка! или что по вашему значит "не работает"? просто скрываемая. потом, даже если написать один метод с правильными значениями, это еще не значит что мы записали в файл... есть куча вариантов (а объект нам не известен, еще помните?) когда сохранение делается в буфер, и после, другой командой сбрасывается на диск, в файл... т.е. даже абсолютно верный с верными (исправленными) параметрами без ошибок 1 метод может ничего не дать, и скорее всего не даст.

> глумиться как кто-то
мы с вами говорим на разный языках... то что вы воспринимаете как глумление, на самом деле и есть помощь... если бы вы реагировали на нее адекватно, давно бы все решили. но для этого нужно думать как программист/знать необходимый минимум.

> учиться мне поздно уже
поэтому вам и лучше нанять программиста.

> когда-нибудь Вам тоже понадобится в другой области что-то исправить или понять, дай Бог помогут...
мне совсем недавно требовалась такая, стиральную машинку установить... область не моя. вызвал, помогли. 3 тысячи все счастье. и Бог тут не причем. он этим не занимается.

> Код или кусок кода на практике дает понимание как и что работает
я дал вам код. самый простой вариант по моему. но без знания jet-а, ADO, подключений (исамов), оно вам сильно помогло?

> теория это в 10 раз больше времени всегда и не всегда толк...
сказка о голодном рыбаке, которого вместо обеда предпочли научить ловить рыбу. кто там что сказал по этому поводу?
хотя у вас цель другая... не дать заработать "рыбаку" на обед, убедив других таких же "наловить вам рыбы за бесплатно".


Doctordradd   (2010-11-09 06:23:00) [19]

Я не бестолочь вовсе и даже не начинающий программист...
здесь вот вы пишете:

> и для кого правильно? вот например для меня, используя jet,
>  в один запрос -  
> SELECT * INTO Export#txt IN "D:\" "Text;" FROM [Sheet1$]
> это экспорт
> SELECT * INTO [Sheet4$] FROM Import#txt IN "D:\" "Text;"
> и импорт
>
> но для тебя это вряд ли будет правильно, нужный тебе формат
> ты не описал, поэтому думаю csv тебе не подойдет.

вижу что идет текст, как в колонки, в строчки его писать???
обьясните понятнее где ошибка и как исправить, если можете и хотите помочь...учиться мне поздно уже, неделю как терпеливо надеюсь понять как этот импорт сделать...
понимаю что Вы специалист в этом и может интересно глумиться как кто-то не может сделать что вам 5 мин., когда-нибудь Вам тоже понадобится в другой области что-то исправить или понять, дай Бог помогут...

Код или кусок кода на практике дает понимание как и что работает, теория это в 10 раз больше времени всегда и не всегда толк...


sniknik   (2010-11-08 23:27:00) [20]

почему же не получается? очень даже получается, в [18] например вопрос полностью решен, и экспорт и импорт... другое дело тебя это чем то не устраивает. а нас не устраивает твоя постановка вопроса... а собственно нет никакой постановки, есть желание высказанное получить код, не утруждаясь даже нормальное ТЗ. впрочем, грамотное ТЗ тоже не поможет, т.к. принцип сайта - "делаешь ты сам. мы можем подсказать, в трудных местах". но от тебя нет попыток  что-то делать... т.что и подсказывать не к чему.


Страницы:   1 2 3

Наверх

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