Delphi & Excel
6242
33
Такая проблема. Нужно считать с Excel-документа данные для последующего переброса в txt...
Т.е. определенные ячейки считываются и заносятся в текстовый файл...
И вот вопрос ... как всё это дело можно считать?
Turbokey
например,
позднее связывание:
CreateOLEObject('Excel.Application') + практически идентичная копия макроса Excel
Turbokey
яндекс тебе на это ответит...

Есть как минимум 3 способа, выбирай по вкусу....
Egor_M
Причём тут Яндекс? Человек задал конкретный вопрос и хочет получить конкретный ответ :спок:
Turbokey
Если имеешь представление о COM, то как два пальца...
Если уже делал выгрузку через этот самый КОМ, то просто возьми переменную COMVariant, засунь в нее значение выделенного диапазона, и разбери в соответствии - строка это, либо число.

Но если ты не знаком с COM - тады даже стадо слонов тебе не поможет....
Turbokey
Вы бы лучше на Исходниках.ру (см. Полезные ссылки) порылись, это будет эффективнее, чем здесь инфу по крупицам собирать (IMHO).
Сибиряк
Человек мог бы сначала в поисковиках поискать...
На запрос "Delphi Excel" ему вывалится КУЧА информации....
Egor_M
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации...
Если тебе просто хочется отметиться.. типа я то тут умный.. а вы все дураки... То у тебя не сильно получилось воплотить свою идею в жизнь....
Turbokey
Excel:=CreateOleObject('Excel.Application');
WorkBook:=Excel.WorkBooks.open(Edit1.text);
WorkSheet:=WorkBook.WorkSheets.Item:1:;
Вот всё, что нужно было сделать... Это позднее связывание. Есть еще раннее ... там посложнее чуть чуть ... но тоже... У кого такая проблема появиться... могу исходники кинуть
Turbokey
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации...
Значит так искал....

Если тебе просто хочется отметиться.. типа я то тут умный.. а вы все дураки... То у тебя не сильно получилось воплотить свою идею в жизнь....
Не вы все, а только отдельные личности, не способные найти через поисковик нужную информацию...

Лично я в свое время искал, нашел минут за 10-15 несколько статей с описанием нескольких способов...

Почитай тут особенно обрати внимание на пункт "RTFM и STFW: как понять, что вы серьезно облажались".
Egor_M
Ты не прав. Форумы нужны для того, что бы человек имел возможность получить помощь или консультацию. Если же думать как ты, то можно снести все топики и оставить один, где будет список доступных поисковиков. Тогда нафига форум вообще :спок:?
Сибиряк
Вопросы бывают разные...

Если бы он спросил, какой способ из [перечень из нескольих способов] вы порекомендуете для работы из Delphi с Excel - я бы не возникал...

Просто у БОЛЬШИНСТВА программеров на Delphi(и не только) рано или поздно возникает потребность работать с Excel. В разных форумах по этому поводу МАССА инфы...

Лично мне не понятно, зачем лезь в форум и задавать вопросы, предварительно не потратив хотя бы 1 часа на поиск решения в другом месте(документация, поисковик, коллеги на работе и т.д.).
Egor_M
Тем не мение. Если ты знаешь способ помочь человеку, но тебе "влом", это не есть хорошо :death: :спок:
Сибиряк
Тем не мение. Если ты знаешь способ помочь человеку, но тебе "влом", это не есть хорошо :death: :спок:
Если человек не хочет думать - это не есть хорошо.
Форум создан для "пробовал-не получается-подскажите", а не для "не пробовал-и не хочу-напишите".
Солидарность с Egor_M.
"не пробовал-и не хочу-напишите"
Читаем внимательно, ещё раз:
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации... :спок:
Сибиряк
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации... :спок:
1. заходим на ya.ru
2. набираем "Delphi & Excel"
3. первая же ссылка расскажет нам о позднем связывании
практически аналогичная ситуация и в rambler и в google - нужные статьи на первой же странице результатов поиска.
Сибиряк
1. заходим на ya.ru
2. набираем "Delphi & Excel"
3. первая же ссылка расскажет нам о позднем связывании
практически аналогичная ситуация и в rambler и в google - нужные статьи на первой же странице результатов поиска.
Он прав.

Самостоятельнее надо быть...
Turbokey
Не могу решить следующую проблему - Из Delphi работаю с Excel 2000. Программу переносят на другой комп - там Оффис ХР. Программа ругается и не хочет работать. Как сделать чтобы она работала с любой версией Excelа а не только с 2000?
Ф-1
в общем случае - никак
Ф-1
А ты с Экселем работаешь через серверные крмпоненты или через OleVariant?
Ф-1
Ты бы хоть написал как ругается....
Egor_M
Delphi 7.0. В панели Servers установлены компоненты для Office2000. Их и использую. Как для других версий Officа - не знаю.
Ф-1
Ну тады понятна! Если работать через OleVariant, тогда таких проблем не возникает.
craxx
Ну тады понятна! Если работать через OleVariant, тогда таких проблем не возникает.
если под "работать через OleVariant" подразумевается работа через позднее связывание, то всё равно не получится.
методы и параметры, увы, различаются.
var
fxla:OLEVariant;
begin
fxla:=CreateOLEObject('Excel.Application');

fxla.Visible:=false;
fxla.AskToUpdateLinks:=false;
// fxla.DisplayAlerts:=false;
fxla.Workbooks.Open(fFileName);
fxla.Sheets[ASheetName].Select;
fCSheet:=ASheetName;
fxla.Cells.Select;
fxla.Selection.Copy;
fxla.ActiveWorkbook.Close(false);
fxla.quit;
fxla:='';
// Здесь имеем в буфере обмена весь лист эксель, разделение ячеек #9, строк #13#10, вставить для примера можно в TMemo его методом PastefromClipboard

end;

Могу кинуть готовый модуль. Скорость работы этого метода самая высокая.
Народ , помогите.

Оброщаюсь к Excel при помощи компаненты.
Как сменить лист?
Как получить имя листа который в данное время активен?

С уважением, Евгений
oygan
Кстати у меня таже фигня. Перерыл кучу литературы, шарюсь наwww.delphimaster.ru и других сайтах. Народ в основном работает через Ole а Com компоненты с закладки Server реже встречаются. проблемма у меня таже. В литературе и и-нете встречается такое ExcelApplication1.Sheet('лист1').Name:='новое имя листа' к примеру но компилятор не признает такое. да еще и нет многих функций и процедур которые вылетают по точке хотя они описываются в литературе.
Пользую Office2000, Delphi6 в Uses прописал Excel2000 и Ole и все что полагается. Эмоций ноль.
Так что не всегда помогает то что в сети находишь. Часто то что работает у одного у другого не работает. Или какие то ньюансы пропущены.
Частично проблему решил!
Тоже Пользую Office2000, Delphi6 и в Uses прописал Excel2000 .

Код следующий
var
Myexcel:TExcelApplication;

WSheet: Excel2000._Worksheet;
MyWorkbook: Excel2000.ExcelWorkbook;
.....................................................................................
//============Создать соединение с EXCEL(раннее связывание)==========
MyExcel := TExcelApplication.Create(Self);
MyExcel.ConnectKind := ckRunningOrNew;
MyExcel.Connect;

//Сделать видемым
MyExcel.Visible[0]:=true;
//==============************=================================
// создать шаблон
//MyWorkbook := MyExcel.Workbooks.Add(OpenDialog1.FileName,0);

//Открать книгу
if Assigned(MyExcel) then
MyWorkbook := MyExcel.Workbooks.Open(OpenDialog1.FileName, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, false, 0);

//Определить рабочий лист
WSheet := MyWorkbook.Worksheets.Item['лист1 или индекс но без ковычек'] as Excel2000._Worksheet;

Правдо это несколько разовое удовольствие у меня.
Если определить рабочий лист один раз и навсегда всё классно.
О вот со сменной листа часто касячет код...
Не знаю, я в C++Builder-е через OlePropertyGet и OlePropertySet никаких проблем не имею.
oygan
Новая проблема!
Как создать новую книгу и сохранить ту ,что есть!
Использую раннее связывание .

Зарание блогадарен.
Коллеги, если не в лом, помогите заработать на отпуск, в долгу не останусь!
Проблема - MS Excel.
Задача - кликнув на клетке "правой мышкой" получить список, следующий клик - значение из списка "легло" в клетку.
Проштудировал всего Уокенбаха (преклоняюсь), ни ответа, ни намёка. А ой как надо.
Повторяю, отблагодарю. :pivo: :bottle: :роза:
piotr@miron.lt