Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.30;
Скачать: CL | DM;

Вниз

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

 
Doctordradd   (2010-11-02 18:37) [0]

Подскажите, пожалуйста, как правильно импортировать данные из таблицы Эксель. Экспорт работает отлично, при импорте открывается файл экселя, записывается временно 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;


 
Leonid Troyanovsky ©   (2010-11-02 18:47) [1]


> Doctordradd   (02.11.10 18:37)  

> из таблицы Эксель. Экспорт работает отлично, при импорте
> открывается файл экселя, записывается временно 1 колонка,
>  при закрытии программы записанные данные исчезают.

Вообще-то оно хорошее правильнописание,
но только почему-то хромает ..

--
Regards, LVT.


 
Doctordradd   (2010-11-02 18:55) [2]

Ммм...по-русски у меня всегда была 5, но уже 8 лет не говорю на родном языке...
В любом случае более подробное обьяснение:
Я новичок в Дельфи, создаю программу, базу данных. Данные работников, скажем записываются в несколько колонок в основном интерфейсе программы тип таблицы. Есть экспорт данных в эксель, пытаюсь создать импорт. Данные в таблицу программы записываются с формы, в которой каждое поле - это колонка в таблице.
При импорте в данный момент открывается нужный файл, имя приходится прописывать в Дельфи, не получается открывать выбор файла, после открытия в таблицу программы импортируются данные указанные в коде Дельфи, но при закрытии созданной программы данные из таблицы исчезают.


 
Anatoly Podgoretsky ©   (2010-11-02 19:11) [3]

> Doctordradd  (02.11.2010 18:37:00)  [0]

Не видать команды записи в файл.


 
Leonid Troyanovsky ©   (2010-11-02 19:13) [4]


> Doctordradd   (02.11.10 18:55) [2]

> Ммм...по-русски у меня всегда была 5, но уже 8 лет не говорю
> на родном языке...

Милн Ален Александр. Пер. Б.Заходер.
Посоветовать даже не знаю что, если с русским плохо.
May be VBA help.

Да, и чего сразу Excel, а не, скажем, Access.

--
Regards, LVT.


 
Doctordradd   (2010-11-03 21:21) [5]

Команду записи с файла не смог вставить, выдает ошибку, с формы вручную данные записываются так:

main.ini.WriteString(Edit1.Text,"n1",Edit2.text);
где
  Edit1.text:=SECT;
  oldname:=Edit1.Text;


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


 
Anatoly Podgoretsky ©   (2010-11-04 11:34) [6]

Так и пишет "выдаю ошибку"


 
Doctordradd   (2010-11-04 16:01) [7]

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


 
Anatoly Podgoretsky ©   (2010-11-04 16:04) [8]

Все понял у тебя или секретная или обидная ошибка.


 
Doctordradd   (2010-11-04 16:51) [9]

Я не знаю как записать эти данные в файл, сделал попытку такого вида:
main.ini.WriteString(" ","n1",ws.Range["B"+inttostr(fst)].Value);


 
Anatoly Podgoretsky ©   (2010-11-04 18:26) [10]

> Doctordradd  (04.11.2010 16:51:09)  [9]

Value это variant, и строки если они есть, то они Юникодовые.


 
Doctordradd   (2010-11-04 18:53) [11]

Ммм... Ваша подсказака для более знающего delphi человека...
Если сам принцип записи в файл верен, подскажите, пожалуйста, более развернуто, если конечно не трудно, что не так в коде записи...
Спасибо.

Заменяя value на text - ошибку не выдает, но и данные не пишутся в файл, delphi дает подсказку что можно писать после точки, только лишь templates.


 
sniknik ©   (2010-11-04 20:46) [12]

> Если сам принцип записи в файл верен
WriteString написана совершенно верно. но принципа в ней нет...


 
Doctordradd   (2010-11-04 23:01) [13]


> WriteString написана совершенно верно

Подскажите, пожалуйста, что должно быть в скобках для правильной записи данных


 
sniknik ©   (2010-11-05 01:55) [14]

в скобках пишется то, что нужно, для метода того класса/типа объекта который используется. их дельфи/хелп вообще то 16 штук выдает... скажи который (номер от 1 до 16) и я посмотрю за тебя какого типа переменные в нем должны быть написаны.

хотя, и в них принципа нет.


 
Германн ©   (2010-11-05 02:51) [15]


> их дельфи/хелп вообще то 16 штук выдает

У меня всего 8. Но среди них нет той, о которой говорит (скорее всего) автор.


> Doctordradd

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


 
Doctordradd   (2010-11-05 15:06) [16]

В книжке написано, что более 400 классов...
В Tlist импортированные данные отображаются, далее нет.
Файл базы .pdb...
Программу не сам пишу, изменяю телефонный справочник...


 
Doctordradd   (2010-11-05 19:47) [17]

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


 
sniknik ©   (2010-11-05 23:31) [18]

> как правильно записать импорт
правильно писать экспорт... т.к. из экселя в файл, импорт наоборот.

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

но для тебя это вряд ли будет правильно, нужный тебе формат ты не описал, поэтому думаю csv тебе не подойдет.

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


 
Doctordradd   (2010-11-07 00:03) [19]


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

Извините, я не программист вовсе, редактирую, подгоняю исходник телефонного справочника под базу данных предприятия...

В самом начале топика дан экспорт, который работает на 5+ и импорт, сделанный вобщем-то так же, но наоборот, здесь-то и загвоздка...
пишется все через main.ini...
Формат разный, если не ошибаюсь, это Text, Date, ItemIndex...


 
sniknik ©   (2010-11-07 00:41) [20]

> Извините, я не программист вовсе
да не за что. найми программиста.

> В самом начале топика дан экспорт, который работает на 5+ и импорт, сделанный вобщем-то так же, но наоборот
ну так, теперь ты все прояснил! сразу стало понятно, что работать не будет... т.к. в данном в топике коде нет чтения из файла, т.е. "наоборот" это запись, именно она и не работает. это карма.


 
Doctordradd   (2010-11-07 03:44) [21]


> найми программиста

Где ж б его нанять здесь...


> в данном в топике коде нет чтения из файла, т.е. "наоборот"
> это запись, именно она и не работает


Подскажите, пожалуйста, все равно не понял по словам где именно ошибка кроется...
Наоборот получается от экспорта вроде бы, но что-то упустил все равно...


 
Германн ©   (2010-11-07 04:00) [22]


>  Doctordradd   (07.11.10 03:44) [21]
>
>
> > найми программиста
>
> Где ж б его нанять здесь...
>

Это будет очень дорого стоить. (Отвечаю и на твоё письмо).
Но есть и такой ресурс http://forum.sources.ru/index.php?showforum=149


 
Doctordradd   (2010-11-07 08:46) [23]

Единственное сообщение что вожу при входе на этот форум, это что мой адрес забанен...раньше точно на этот форум не заходил:

Обнаружена ошибка. Если Вам неизвестны причины ошибки, попробуйте обратиться к файлам помощи.

Обнаружена ошибка:

Вы ЗАБАНЕНЫ на этом форуме


 
sniknik ©   (2010-11-07 10:38) [24]

> Вы ЗАБАНЕНЫ на этом форуме
напиши это модератору - forum@sources.ru вместе с тем, что не заходил... может они всю под сеть закрыли из-за частого "кидалова" из нее.


 
Doctordradd   (2010-11-08 22:27) [25]

Так и не получается, значит, решить вопрос этого топика с импортом из Экселя?


 
sniknik ©   (2010-11-08 23:27) [26]

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


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

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

> и для кого правильно? вот например для меня, используя 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-09 08:20) [28]

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

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

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

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

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

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

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


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

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

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 09:40) [30]

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

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

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


 
sniknik ©   (2010-11-09 09:54) [31]

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

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


 
Andy BitOff ©   (2010-11-09 10:05) [32]


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

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


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


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

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


 
Dennis I. Komarov ©   (2010-11-09 13:33) [34]


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

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


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


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

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


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

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


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

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


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

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


 
Dennis I. Komarov ©   (2010-11-09 16:20) [36]

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


 
sniknik ©   (2010-11-09 17:53) [37]

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

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

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


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

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

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


 
Anatoly Podgoretsky ©   (2010-11-09 18:58) [39]

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

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


 
sniknik ©   (2010-11-09 21:33) [40]

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

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

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



Страницы: 1 2 вся ветка

Текущий архив: 2011.01.30;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.007 c
15-1287088146
Юрий
2010-10-15 00:29
2011.01.30
С днем рождения ! 15 октября 2010 пятница


4-1244470156
warner
2009-06-08 18:09
2011.01.30
Как прочитать текст в ячейках чужого ListView?


4-1244384113
dmitry_12_08_73
2009-06-07 18:15
2011.01.30
Конфликт SetWindowsHookEx при быстром 5-тикратном нажатии Shift


15-1286958509
12
2010-10-13 12:28
2011.01.30
ORA-01403. Запрос прилинкованого сервера Oracle из MSSQL


2-1289371618
Irisss
2010-11-10 09:46
2011.01.30
TObjectList не преобразовывает item ы в Duble