Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

Как обрабатывать текст в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.05 c
15-1162183412
Slider007
2006-10-30 07:43
2006.11.19
С днем рождения ! 30 октября


15-1162000406
ProV
2006-10-28 05:53
2006.11.19
Можно ли изменить параметр FVisible в привате класса другого юнит


5-1143226107
Volf_555
2006-03-24 21:48
2006.11.19
Проблема с присвоением имени новому компоненту


2-1162472187
Sergey_b
2006-11-02 15:56
2006.11.19
SELECT, UPDATE, INSERT


15-1162358253
Pazitron_Brain
2006-11-01 08:17
2006.11.19
Power Shell





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский