Delphi & Excel
6434
33
Такая проблема. Нужно считать с Excel-документа данные для последующего переброса в txt...
Т.е. определенные ячейки считываются и заносятся в текстовый файл...
И вот вопрос ... как всё это дело можно считать?
Т.е. определенные ячейки считываются и заносятся в текстовый файл...
И вот вопрос ... как всё это дело можно считать?
например,
позднее связывание:
CreateOLEObject('Excel.Application') + практически идентичная копия макроса Excel
позднее связывание:
CreateOLEObject('Excel.Application') + практически идентичная копия макроса Excel
яндекс тебе на это ответит...
Есть как минимум 3 способа, выбирай по вкусу....
Есть как минимум 3 способа, выбирай по вкусу....
Причём тут Яндекс? Человек задал конкретный вопрос и хочет получить конкретный ответ
Если имеешь представление о COM, то как два пальца...
Если уже делал выгрузку через этот самый КОМ, то просто возьми переменную COMVariant, засунь в нее значение выделенного диапазона, и разбери в соответствии - строка это, либо число.
Но если ты не знаком с COM - тады даже стадо слонов тебе не поможет....
Если уже делал выгрузку через этот самый КОМ, то просто возьми переменную COMVariant, засунь в нее значение выделенного диапазона, и разбери в соответствии - строка это, либо число.
Но если ты не знаком с COM - тады даже стадо слонов тебе не поможет....
Вы бы лучше на Исходниках.ру (см. Полезные ссылки) порылись, это будет эффективнее, чем здесь инфу по крупицам собирать (IMHO).
Кстати, это может быть Вам полезно http://www.citforum.ru/programming/delphi/excel/
Сейчас читают
Вот пришел из отпуска и подумал.....
21077
66
Юбилейные 1, 2, 10, 25-ти рублевые монеты РФ!!! (часть 4)
385240
1000
Жизнь в виртуале NF
96015
422
Человек мог бы сначала в поисковиках поискать...
На запрос "Delphi Excel" ему вывалится КУЧА информации....
На запрос "Delphi Excel" ему вывалится КУЧА информации....
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации...
Если тебе просто хочется отметиться.. типа я то тут умный.. а вы все дураки... То у тебя не сильно получилось воплотить свою идею в жизнь....
Если тебе просто хочется отметиться.. типа я то тут умный.. а вы все дураки... То у тебя не сильно получилось воплотить свою идею в жизнь....
Excel:=CreateOleObject('Excel.Application');
WorkBook:=Excel.WorkBooks.open(Edit1.text);
WorkSheet:=WorkBook.WorkSheets.Item;
Вот всё, что нужно было сделать... Это позднее связывание. Есть еще раннее ... там посложнее чуть чуть ... но тоже... У кого такая проблема появиться... могу исходники кинуть
WorkBook:=Excel.WorkBooks.open(Edit1.text);
WorkSheet:=WorkBook.WorkSheets.Item;
Вот всё, что нужно было сделать... Это позднее связывание. Есть еще раннее ... там посложнее чуть чуть ... но тоже... У кого такая проблема появиться... могу исходники кинуть
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации...Значит так искал....
Если тебе просто хочется отметиться.. типа я то тут умный.. а вы все дураки... То у тебя не сильно получилось воплотить свою идею в жизнь....Не вы все, а только отдельные личности, не способные найти через поисковик нужную информацию...
Лично я в свое время искал, нашел минут за 10-15 несколько статей с описанием нескольких способов...
Почитай тут особенно обрати внимание на пункт "RTFM и STFW: как понять, что вы серьезно облажались".
Ты не прав. Форумы нужны для того, что бы человек имел возможность получить помощь или консультацию. Если же думать как ты, то можно снести все топики и оставить один, где будет список доступных поисковиков. Тогда нафига форум вообще ?
Вопросы бывают разные...
Если бы он спросил, какой способ из [перечень из нескольих способов] вы порекомендуете для работы из Delphi с Excel - я бы не возникал...
Просто у БОЛЬШИНСТВА программеров на Delphi(и не только) рано или поздно возникает потребность работать с Excel. В разных форумах по этому поводу МАССА инфы...
Лично мне не понятно, зачем лезь в форум и задавать вопросы, предварительно не потратив хотя бы 1 часа на поиск решения в другом месте(документация, поисковик, коллеги на работе и т.д.).
Если бы он спросил, какой способ из [перечень из нескольих способов] вы порекомендуете для работы из Delphi с Excel - я бы не возникал...
Просто у БОЛЬШИНСТВА программеров на Delphi(и не только) рано или поздно возникает потребность работать с Excel. В разных форумах по этому поводу МАССА инфы...
Лично мне не понятно, зачем лезь в форум и задавать вопросы, предварительно не потратив хотя бы 1 часа на поиск решения в другом месте(документация, поисковик, коллеги на работе и т.д.).
Тем не мение. Если ты знаешь способ помочь человеку, но тебе "влом", это не есть хорошо
Тем не мение. Если ты знаешь способ помочь человеку, но тебе "влом", это не есть хорошоЕсли человек не хочет думать - это не есть хорошо.
Форум создан для "пробовал-не получается-подскажите", а не для "не пробовал-и не хочу-напишите".
Солидарность с Egor_M.
Сибиряк
old hamster
"не пробовал-и не хочу-напишите"Читаем внимательно, ещё раз:
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации...
А человек поискал в поисковике... И ему выдало куча НЕНУЖНОЙ информации...1. заходим на ya.ru
2. набираем "Delphi & Excel"
3. первая же ссылка расскажет нам о позднем связывании
практически аналогичная ситуация и в rambler и в google - нужные статьи на первой же странице результатов поиска.
1. заходим на ya.ruОн прав.
2. набираем "Delphi & Excel"
3. первая же ссылка расскажет нам о позднем связывании
практически аналогичная ситуация и в rambler и в google - нужные статьи на первой же странице результатов поиска.
Самостоятельнее надо быть...
Не могу решить следующую проблему - Из Delphi работаю с Excel 2000. Программу переносят на другой комп - там Оффис ХР. Программа ругается и не хочет работать. Как сделать чтобы она работала с любой версией Excelа а не только с 2000?
А ты с Экселем работаешь через серверные крмпоненты или через OleVariant?
Delphi 7.0. В панели Servers установлены компоненты для Office2000. Их и использую. Как для других версий Officа - не знаю.
Ну тады понятна! Если работать через OleVariant, тогда таких проблем не возникает.
Ну тады понятна! Если работать через 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;
Могу кинуть готовый модуль. Скорость работы этого метода самая высокая.
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 при помощи компаненты.
Как сменить лист?
Как получить имя листа который в данное время активен?
С уважением, Евгений
Оброщаюсь к Excel при помощи компаненты.
Как сменить лист?
Как получить имя листа который в данное время активен?
С уважением, Евгений
Кстати у меня таже фигня. Перерыл кучу литературы, шарюсь наwww.delphimaster.ru и других сайтах. Народ в основном работает через Ole а Com компоненты с закладки Server реже встречаются. проблемма у меня таже. В литературе и и-нете встречается такое ExcelApplication1.Sheet('лист1').Name:='новое имя листа' к примеру но компилятор не признает такое. да еще и нет многих функций и процедур которые вылетают по точке хотя они описываются в литературе.
Пользую Office2000, Delphi6 в Uses прописал Excel2000 и Ole и все что полагается. Эмоций ноль.
Так что не всегда помогает то что в сети находишь. Часто то что работает у одного у другого не работает. Или какие то ньюансы пропущены.
Пользую 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;
Правдо это несколько разовое удовольствие у меня.
Если определить рабочий лист один раз и навсегда всё классно.
О вот со сменной листа часто касячет код...
Тоже Пользую 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;
Правдо это несколько разовое удовольствие у меня.
Если определить рабочий лист один раз и навсегда всё классно.
О вот со сменной листа часто касячет код...
craxx
рыжий котэ
Не знаю, я в C++Builder-е через OlePropertyGet и OlePropertySet никаких проблем не имею.
Новая проблема!
Как создать новую книгу и сохранить ту ,что есть!
Использую раннее связывание .
Зарание блогадарен.
Как создать новую книгу и сохранить ту ,что есть!
Использую раннее связывание .
Зарание блогадарен.
Коллеги, если не в лом, помогите заработать на отпуск, в долгу не останусь!
Проблема - MS Excel.
Задача - кликнув на клетке "правой мышкой" получить список, следующий клик - значение из списка "легло" в клетку.
Проштудировал всего Уокенбаха (преклоняюсь), ни ответа, ни намёка. А ой как надо.
Повторяю, отблагодарю.
piotr@miron.lt
Проблема - MS Excel.
Задача - кликнув на клетке "правой мышкой" получить список, следующий клик - значение из списка "легло" в клетку.
Проштудировал всего Уокенбаха (преклоняюсь), ни ответа, ни намёка. А ой как надо.
Повторяю, отблагодарю.
piotr@miron.lt