Старый 14.11.2004, 14:29   #1   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
Офисные приложения и Делфи

Народ подскажите как мне в делфи приспособить Excel-евский файл
Допустим мне нужно из листа в екселе загрузить значение ячейки А1
в делфи в компонент Edit и т.д.
  Ответить с цитированием
Старый 16.11.2004, 11:22   #2   
Форумец
 
Аватар для ZLO
 
Сообщений: 1,543
Регистрация: 27.12.2003
Возраст: 43

ZLO вне форума Не в сети
rtfm
  Ответить с цитированием
Старый 16.11.2004, 15:16   #3   
Хищник
 
Аватар для Rabbit
 
Сообщений: 217
Регистрация: 24.01.2004
Возраст: 45

Rabbit вне форума Не в сети
Код:
// Что-то вроде этого..
procedure TForm1.Button1Click(Sender: TObject);
  var
    v:variant;
begin
      v:=CreateOleObject('Excel.Application');
      Edit1.Text = v.Worksheets["Sheet1"].Cells[6, 1].Value;
end;
Я не уверен насчёт правильности скобок в выделенной строке, это прийдётся смотреть самому в хелпе.
Насчёт свойств и методов Excel.Application смотри в хелпе к Excel.
  Ответить с цитированием
Старый 17.11.2004, 16:22   #4   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
Вот, кусок кода, правда, на С++, но это почти одно и то же
//---------------------------------------------------------------------------
void __fastcall TfrmInpMat1::LoadExcelFile()
{
iNameCol = 2;
iStatusCol = 6;

Variant vExcel,vBook,vSheet;
Function Open("Open");
PropertyGet Workbooks("Workbooks");
PropertyGet Sheets("Worksheets");
PropertyGet Range("Range");
PropertyGet Count("Count");
PropertyGet Rows("Rows");
PropertyGet Value("Value");
PropertyGet Item("Item");

PropertySet Visible("Visible");

Procedure Quit("Quit");
Procedure Close("Close");
Procedure Activate("Activate");

TList *slCodes = new TList();//Номера строк
try {
vExcel = Variant::CreateObject("Excel.Application");
vExcel.Exec(Visible << false);
vBook = vExcel.Exec(Workbooks).Exec(Open <<WideString(sFileName));
int SheetCount = vBook.Exec(Sheets).Exec(Count);
vSheet = vBook.Exec(Sheets << SheetCount);//Откроем последнюю страницу
vSheet.Exec(Activate);

// grdStrings->ColCount = 6;
grdStrings->Cells[0][0] = "КОД";
grdStrings->Cells[1][0] = "Ст.часа";
grdStrings->Cells[2][0] = "Наименование";
grdStrings->Cells[3][0] = "Зарп.";
grdStrings->Cells[4][0] = "Трудоз.";
grdStrings->Cells[5][0] = "Маш.предст.";
grdStrings->Cells[6][0] = "Статус";

Variant vValueA, vValueQ, vValueB, vValueG, vValueF, vValueY ;
Range.ClearArgs();
vValueA = vSheet.Exec(Range << "A43" << "A65530").Exec(Value);

int Cnt = 0;//Счетчик строк
int iEmptyCnt = 0;//Счетчик пустых строк

AnsiString asStr;
while ( iEmptyCnt<4 ){//Заполняеим массив номеров строк
asStr = AnsiString( vValueA.GetElement(Cnt+1,1));
if (asStr.Length() && asStr.UpperCase().Pos("РАЗД") == 0){//То, что надо
iEmptyCnt = 0;
slCodes->Add((void *)Cnt);
} else iEmptyCnt++;
Cnt++;
}

AnsiString asEnd = Cnt+44;//Сколько насчитали строк
asStr = slCodes->Count;

Range.ClearArgs();//Стоимость часа
vValueQ = vSheet.Exec(Range << "Q43" << "Q" + asEnd).Exec(Value);

Range.ClearArgs();//Наименование
vValueB = vSheet.Exec(Range << "B43" << "B" + asEnd).Exec(Value);

Range.ClearArgs();//Зарплата
vValueG = vSheet.Exec(Range << "G43" << "G" + asEnd).Exec(Value);

Range.ClearArgs();//Трудозатраты
vValueF = vSheet.Exec(Range << "F43" << "F" + asEnd).Exec(Value);

Range.ClearArgs();//Машина-представитель
vValueY = vSheet.Exec(Range << "Y43" << "Y" + asEnd).Exec(Value);

Cnt = slCodes->Count;
grdStrings->RowCount = Cnt + 1;
int iType; //Error - не Error...
int iIdx;
double dRes;
for (int i = 0; i<Cnt; i++){
iIdx = (int) slCodes->Items[i];

grdStrings->Cells[0][i+1] = vValueA.GetElement( iIdx+1,1);//Код

iType = vValueQ.GetElement( iIdx+1,1).Type();//Ст. часа
if (iType == varError || iType == varString){
grdStrings->Cells[1][i+1] = "-2,00";
AddStatus("Нет стоимости часа. ",i+1);
AddWarning();
}
else{
dRes = RoundTo(vValueQ.GetElement( iIdx+1,1), -2);
/* if (IsZero(dRes,0.001))
AddStatus("Стоимость часа == 0 ",i+1);*/
if (dRes <0){
AddStatus("Стоимость часа < 0 ",i+1);
AddWarning();
}
grdStrings->Cells[1][i+1] = dRes;
}

grdStrings->Cells[2][i+1] = vValueB.GetElement( iIdx+1,1);//Наименование

iType = vValueG.GetElement( iIdx+1,1).Type();//Зарплата
if (iType == varError || iType == varString){
grdStrings->Cells[3][i+1] = "-2,00";
AddStatus("Нет зарплаты. ",i+1);
AddWarning();
}
else{
dRes = RoundTo(vValueG.GetElement( iIdx+1,1), -2);
grdStrings->Cells[3][i+1] = dRes;
}

iType = vValueF.GetElement( iIdx+1,1).Type();//Трудозатраты
if (iType == varError || iType == varString){
grdStrings->Cells[4][i+1] = "-2,00";
AddStatus("Нет трудозатрат. ",i+1);
AddWarning();
}
else{
dRes = RoundTo(vValueF.GetElement( iIdx+1,1), -2);
grdStrings->Cells[4][i+1] = dRes;
}

grdStrings->Cells[5][i+1] = vValueY.GetElement( iIdx+1,1);//Машина - представитель
}


grdStrings->Row = 1;
edtCurLine->Text = grdStrings->Row;
edtCount->Text = grdStrings->RowCount - 1;
MainForm->Log->WriteMessage("Машины::открыт файл " + sFileName);
vBook.Exec(Close);
vExcel.Exec(Quit);
vValueA = Unassigned;
vValueQ = Unassigned;
vValueB = Unassigned;
vValueG = Unassigned;
vValueF = Unassigned;
vValueY = Unassigned;

vSheet = Unassigned;
vBook = Unassigned;
vExcel = Unassigned;
}
catch (Exception &e){
try{
vBook.Exec(Close);
vExcel.Exec(Quit);
vBook = Unassigned;
vExcel = Unassigned;
} catch(...){};
Application->MessageBox(e.Message.c_str(), "Ошибка !", MB_OK | MB_ICONSTOP);
}
iLoadWarnings = iWarningsFound;
delete slCodes;
}
//---------------------------------------------------------------------------
  Ответить с цитированием
Старый 21.11.2004, 17:44   #5   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
мда-а-а, короче гемор полный, я вобщем забил с экселем, всем спасибо.
Я решил сделать базу на парадоксе 7 (уже сделал).
С парадоксом все охрененно работает, только вот появилась новая проблема: как сделать так штоб прога и на других компах работала, где нет делфи. Просто кода ее переносишь на другой комп она ругаетсмя что типа не распознала тип базы данных. Как мне обяснили она просит драйвер БДЕ, отсюда вопрос: как его поставить отдельно без делфей, а еще лучше чтоб без него все работало.
  Ответить с цитированием
Старый 22.11.2004, 07:57   #6   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
Парадокс - тоже геморрой, индексы падают и проч.
БДЕ надо в инсталлятор включить, как точно - не помню, смотри доку на БДЕ, какие именно файлы и куда включать. Проблема - совместимость, например, ты заранее не знаешь, есть ли БДЕ на машине, какой версии и используется ли другими приложениями. Можно так ее постпвить, что другие приложения отвалятся. Вообще, БДЕ - каменный век.
  Ответить с цитированием
Старый 22.11.2004, 19:54   #7   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
zss_vrn млин а че делать?
мне нужно создать простенькую базу данных, я объяснил одному че мне конкретно нужно, он мне сказал что мне нужен Access, тока как его подключить в дельфи я не знаю.
Прга короче для учета товара в магазине, сам я не програмист, просто знакомые попросили, а делфи знаю на начальном уровне.
  Ответить с цитированием
Старый 22.11.2004, 23:31   #8   
Gross
 
Аватар для Grossmeister
 
Сообщений: 985
Регистрация: 10.05.2002
Возраст: 41
Записей в дневнике: 7

Grossmeister вне форума Не в сети
metallic Обратитесь к профессионалам. Иначе и магазин ждет банкротство.
  Ответить с цитированием
Старый 23.11.2004, 07:19   #9   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
metallic
У аксесса - свои средства программирования, для простеньких задач их вполне должно хватить. А вообще я согласен с Grossmeister
  Ответить с цитированием
Старый 23.11.2004, 13:13   #10   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
zss_vrn Grossmeister млин какое бонкротство?
там примитивная прога нужна, просто руками лень считать....
  Ответить с цитированием
Старый 26.11.2004, 00:41   #11   
Форумец
 
Сообщений: 4,909
Регистрация: 08.04.2003
Возраст: 42

zic вне форума Не в сети
ADO + MS Jet
Гроссместер судя по всему не вьебись какой профессионал
  Ответить с цитированием
Старый 26.11.2004, 07:09   #12   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
metallic
А просто екселем нельзя решить примитивную задачу? Он много умеет, этот ексель.

И зачем аксесс подключать к дельфи, если в самом аксессе можно напрограмить?

ЗЫ:
Вначале речь шла об екселе
  Ответить с цитированием
Старый 26.11.2004, 09:37   #13   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
zss_vrn млин в конечном итоге должна получится простая панель управления с плюсом и минусом при нажатии на которые должно прибовлятся и убавлятся, т.к. пользователь будет не очень продвинутый.
  Ответить с цитированием
Старый 26.11.2004, 11:50   #14   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
metallic
Простые проги для юзера - как раз самые сложные для программера

В сбилдере 5 и 6 есть компоненты для работы с екселем. Они довольно просты - глянь. Я не пользовал, но проверял - работают.

Правда,если есть калькулятор и ексель - зачем еще и прогу городить? Если юзер с екселем не справится, то с самопальной прогой еще хуже

Или все же к аксессу надо? Если к аксессу - то можно через ODBC->BDE...
  Ответить с цитированием
Старый 28.11.2004, 01:55   #15   
Форумец
 
Сообщений: 4,909
Регистрация: 08.04.2003
Возраст: 42

zic вне форума Не в сети
Или все же к аксессу надо? Если к аксессу - то можно через ODBC->BDE...

Мне интересно как можно работать с сервером автоматизации через odbc или там bde?

Если же речь идет о Jet то опять же не понимаю нахрена odbc и тем паче bde.
  Ответить с цитированием
Старый 29.11.2004, 07:32   #16   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
zic

Сервер автоматизации? Но к вопросу можно подойти, как к серверу БД!
Очень просто.

1. Указываем в качестве источника данных ODBC "База данных MS ACESS" (Панель управления->Администрирование->Источники данных ОDBC...)

2. Прописываем алиас в BDE на этот источник данных.

3. Работаем в проге через стандартные компоненты.

Так можно цеплять и ексель, если приспичит, но, конечно, файл ексель должен иметь структуру таблицы.
  Ответить с цитированием
Старый 30.11.2004, 01:11   #17   
Форумец
 
Сообщений: 4,909
Регистрация: 08.04.2003
Возраст: 42

zic вне форума Не в сети
zss_vrn
В таком случае ты работаешь не с Access а c MS Jet напрямую.

1 ms data link удобней будет
2 ole db, закладка ado для delphi, bde давно похоронен даже самим борландом
3
  Ответить с цитированием
Старый 30.11.2004, 06:50   #18   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
zic
К стыду своему не знаю, что такое MS Jet
Что БДЕ похоронен согласен, я и сам писал это в предыдущих постах. ИМХО, дельфи тоже доживает свой век.
  Ответить с цитированием
Старый 30.11.2004, 08:24   #19   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
Все я разобрался как ацесовскую базу прицепить в делфи, осталось тока придумать как в нее картинок напихать.
Оказалось там сложнее с этим чем в парадоксе.
Кто нить может рассказать как влепить картинку в базу.
  Ответить с цитированием
Старый 30.11.2004, 14:47   #20   
Форумец
 
Аватар для fishca
 
Сообщений: 708
Регистрация: 23.12.2002
Возраст: 52
Записей в дневнике: 1

fishca вне форума Не в сети
zss_vrn
Цитата:
ИМХО, дельфи тоже доживает свой век.
а как же Delphi 2005 ?
Может еще и Visual Studio тоже доживает свой век?
  Ответить с цитированием
Старый 01.12.2004, 01:37   #21   
Форумец
 
Сообщений: 4,909
Регистрация: 08.04.2003
Возраст: 42

zic вне форума Не в сети
zss_vrn
субд ,часть windows, access это лишь примитивный фронтэнд к ней, работающий через кривую жопу - mda

metallic
просто клади картинки в поля blob,
типа image в jet по моему нет.

fishca
Да хоть 2006.
  Ответить с цитированием
Старый 01.12.2004, 07:06   #22   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
fishca
Цитата:
а как же Delphi 2005 ?
Может еще и Visual Studio тоже доживает свой век?
Дельфи - это VCL, объектная обертка к Win32 API. С появлением NET необходимость в обертках отпала.

Visual Studio NET имеет перспективы, равно как и Java. Все остальное, имхо, ждет судьба FoxPro и т.д. Я говорю только об офисных приложениях.

zic
Блин, стока лет имею дело с Win, а этого не знаю. Век живи, век учись - один хрен, дураком помрешь
  Ответить с цитированием
Старый 01.12.2004, 09:12   #23   
Форумец
 
Аватар для fishca
 
Сообщений: 708
Регистрация: 23.12.2002
Возраст: 52
Записей в дневнике: 1

fishca вне форума Не в сети
zss_vrn
Delphi - это не только VCL, а среда быстрой разработки
Visual Studio NET - среда быстрой разработки

И чем же одно перспективней другого? И там и там можно клепать приложения как для .Net так и для Win32.
  Ответить с цитированием
Старый 01.12.2004, 11:12   #24   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
Все я разобрался
  Ответить с цитированием
Старый 01.12.2004, 11:53   #25   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
fishca

Дельфи - среда быстрой разработки, основанная на собственной компанентной модели, которая является оберткой родного API.

VS NET и DELPHI.NET- то же, но компонентная модель - уже часть системы, то есть, made by MS. У борланда больше нет преимущества, которое было раньше, то есть, удачной объектной модели. Зато есть недостатки, например, только один язык - паскаль. Но это - мелочи, главное, что теперь борланду приходится играть "на чужом поле", и выиграть конкурентную борьбу с MS в таких условиях вряд ли возможно.

К этому стоит добавить, что дельфи "за бугром" и раньше не пользовалась таким спросом, как у нас, а сейчас - тем более. Следовательно, спец по дельфи при прочих равных имеет меньшую ценность нежели спец по VS NET, ему можно меньше платить.

Вывод - дельфи имеет мало перспектив.
  Ответить с цитированием
Старый 01.12.2004, 13:01   #26   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
Млин, во всех понесло !
  Ответить с цитированием
Старый 23.12.2004, 10:47   #27   
Вселённый...
 
Аватар для Кот в сапогах
 
Сообщений: 522
Регистрация: 03.01.2003
Возраст: 47

Кот в сапогах вне форума Не в сети
metallic Как профессиональный программист начинающему программисту - поскольку ты использовал Paradox (встроенный в Delphi), а он соотвественно использует BDE (Borland DataBase Engine - Машина баз данных). То для использования таких программ на других машинах необходимо проинсталлировать BDE соотвестенно.

Сделать это можно, грубо говоря, двумя путями:

1. Взять дистрибутив Дельфи и происталлировать на компах где будет использоваться данная программа исключительно только BDE.

2. Создать к своей программе с помощью поставляемого с Дельфи пакета InstallShield инсталлятор, в который необходимо включить BDE. Иными слова твоя прога будет инсталлироваться как все программы, например, тот же MS Office и прочие.
  Ответить с цитированием
Старый 23.12.2004, 11:27   #28   
вЫкинг
 
Аватар для metallic
 
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39

metallic вне форума Не в сети
Кот в сапогах я уже давно переделал прогу на ацес, там никакого гемора
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind