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

Вниз

Как обрабатывать текст в Exel?   Найти похожие ветки 

 
WebSqlNeederr   (2006-10-05 15:09) [0]

У меня есть прайс фирмы из 1000 строк. В строке пять столбцов но заполняются не все а выборочно (три обязательные и две на выбор). Нужно средствами Делфи обработать этот екселевский документ и перегнать в БД на сайт (MySQL).

Помогите как это реализовать.


 
Сергей М. ©   (2006-10-05 15:09) [1]

И в чем проблема ?


 
WebSqlNeederr   (2006-10-05 15:30) [2]

Можно примерчик как считывать это в Делфи


 
Сергей М. ©   (2006-10-05 15:33) [3]

http://www.google.ru/search?hs=VQ6&hl=ru&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&q=CreateOleObject%28%27Excel.Application%27%29&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=lang_ru


 
WebSqlNeederr   (2006-10-05 15:45) [4]

Спасибо за ссылку. Но там немного сложнее все чем мне нужно.

Можете здесь написать вот как взять и прочитать в Делфи первую строчку из екселя? Если в этой строчки 5 столбцов. И информацию из каждого столбца сохранить в масив.

И вообще какой компонент использовать ...

Был бы премногоблагодарен за помощь.


 
Сергей М. ©   (2006-10-05 15:54) [5]

var
 Excel, MyArray: Variant;
 
..
Excel := CreateOleObject("Excel.Application");
try
  Excel.Workbooks.Open("MyDoc.xls");  
  MyArray := Excel.Workbooks[1].Worksheets[1].Range["A1:E1"];
finally
 Excel.Quit;
 Excel := Unassigned;
end;


 
WebSqlNeederr   (2006-10-05 16:22) [6]

Спасибо большое за пример.

Правда Делфи ругается, CreateOleObject. Может в uses какой то юнит дописать нужно?


 
WebSqlNeederr   (2006-10-05 16:25) [7]

Уже сам разобрался, извините :)


 
Сергей М. ©   (2006-10-05 16:25) [8]

ActiveX


 
WebSqlNeederr   (2006-10-05 16:27) [9]

Еще вопрос, а как из варианта в стринг перекинуть? Я попробовал так Memo1.Text:=MyArray; и вот так Memo1.Text:=MyArray[0]; но не получается :(


 
Сергей М. ©   (2006-10-05 16:29) [10]


> не получается


И что сие значит ?


 
WebSqlNeederr   (2006-10-05 16:54) [11]

ну пишет cpuld not convert variant of type (Dispatch) into type (String)


 
WebSqlNeederr   (2006-10-05 17:26) [12]

Подскажите хоть кто то как собственно вывести в мемо первую ячейку? Я уже пробовал и вот так, но не помогает :(

memo1.text:=vartostr(MyArray[1][1]);


 
WebSqlNeederr   (2006-10-05 17:26) [13]

Теперь пишет Invalid argument Что это значит? Что изменить нужно?


 
palva ©   (2006-10-05 23:44) [14]

memo1.text := MyArray[1, 1].Value;


 
WebSqlNeederr   (2006-10-07 04:41) [15]

palva, опять пишет invalid argument :(


 
WebSqlNeederr   (2006-10-07 12:44) [16]

..


 
WebSqlNeederr   (2006-10-07 14:23) [17]

Плдскажите хоть кто нибудь ато я не могу понять в чем дело :(


 
WebSqlNeederr   (2006-10-07 22:10) [18]

...


 
Master_ ©   (2006-10-07 22:40) [19]

Попробуйте обращаться конкретно к ячейкам:

memo1.text:=Excel.ActiveSheet.Cells.Item[x,y].value;

где x  и  y  соответственно № строки и № ячейки


 
WebSqlNeederr   (2006-10-07 23:09) [20]

Увы не работает все это :( Приблизительно те же ошибки выдает.

Я не могу понять в чем дело? У других аналогичный код работает?


 
EvS ©   (2006-10-07 23:15) [21]

Выкладывай код.


 
Master_ ©   (2006-10-07 23:21) [22]

У меня работает это!
Вот пример того что именно я делаю когда нужен импорт данных из MS Excel:

procedure EXCELOUT;
var
Excel,Sheet:Variant;
wb,savechanges:olevariant;
xlend,x:integer;
begin //Подготовка документя
 Excel:=CreateOleObject("Excel.application");
 Excel.Visible:=false;//Прячу EXCEL
// Открываю Excel
 wb:=excel.WorkBooks.Open(title.opendialog2.FileName);

//Ссылаюсь на первый лист
 Sheet:=Excel.Workbooks[1].sheets[1];

 xlend:=strtoint(inexcel.Edit1.text);
//Здесь заполнение моей базы данными из EXCEL файла
 for x:=2 to xlend do// заполнять начиная со 2 строки по XLEND
begin
title.ClientDataSet1.Insert;
title.ClientDataSet1.FieldByName("FilmName").AsString:=Excel.ActiveSheet.Cells.I tem[x,1].value;
title.ClientDataSet1.FieldByName("JanrFilma").AsString:=Excel.ActiveSheet.Cells. Item[x,2].value;
title.ClientDataSet1.FieldByName("rem2").AsString:=Excel.ActiveSheet.Cells.Item[ x,3].value;
title.ClientDataSet1.FieldByName("komentarii").AsString:=Excel.ActiveSheet.Cells .Item[x,4].value;
title.ClientDataSet1.Post;
end;
title.ClientDataSet1.First;
wb.close(savechanges:=false);Не сохранять изменений
excel.quit;//ВЫйти и закрыть excel объект

end;

В uses прописать ActiveX и COMObj

Работает 100 процентов, попробуйте!


 
WebSqlNeederr   (2006-10-07 23:36) [23]

Master_, большое спасиьо! Теперь все ОК!


 
Master_ ©   (2006-10-07 23:39) [24]

Рад помочь


 
Percent   (2006-10-08 01:45) [25]

Обмен тыренным кодом.
Очень продуктивно...


 
Master_ ©   (2006-10-08 01:57) [26]

какой он тыренный?
очень даже стандартный!


 
Percent   (2006-10-08 02:00) [27]

какой он тыренный?
очень даже стандартный!


Что ни строка - то перл.
А вот это вообще шедевр:
title.ClientDataSet1.FieldByName("JanrFilma").AsString


 
Master_ ©   (2006-10-08 02:02) [28]

Это часть моей ГОРЕ ПРОГРАММЫ базы данных филмов, а что?


 
Percent   (2006-10-08 02:10) [29]

Да БД... "нормализованная", типа...


 
Master_ ©   (2006-10-08 02:17) [30]

типа...
А поповоду

var
Excel,Sheet:Variant;
wb,savechanges:olevariant;
begin //Подготовка документа
Excel:=CreateOleObject("Excel.application");
Excel.Visible:=false;
wb:=excel.WorkBooks.Open(title.opendialog2.FileName);
Sheet:=Excel.Workbooks[1].sheets[1];


это влюбом Help-e типа Kuliba от Озерова есть
а она для меня была настольной книгой, и таковой является до сих пор
Молод я еще что бы все знать!!!! :-)))


 
Антоныч ©   (2006-10-09 17:44) [31]

Диапазон данных из Excel лучше вытягивать так:
var
  ...
  Buf: Variant;
  ...  // здесь подключаемся к Excel
  Buf:=VarArrayCreate([1,{сколько строк},1,{сколько столбцов}], VarVariant);
  Buf:=WorkSheet.Range[WorkSheet.Cells[1,1],WorkSheet.Cells[{сколько строк},{сколько столбцов}]].Value;
  ... //здесь уже можно закрывать Excel и работать с Buf как с обычным массивом

  Аналогично можно передавать в Excel диапазон данных. Достоинства - высокая скорость при передаче больших объёмов данных.



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

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

Наверх




Память: 0.53 MB
Время: 0.031 c
2-1162298089
daser
2006-10-31 15:34
2006.11.19
Можно ли залить форму рисунком (bmp, jpg...)?


1-1160228759
DeBa
2006-10-07 17:45
2006.11.19
Узнать парент


15-1162362340
Виджет
2006-11-01 09:25
2006.11.19
Апгрейд


15-1162058237
Ketmar
2006-10-28 21:57
2006.11.19
ай, какая чудесная картинка...


15-1162213008
ZeroDivide
2006-10-30 15:56
2006.11.19
Заполняем анкетку