
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
Офисные приложения и Делфи
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#3 |
|
Хищник
Сообщений: 217
Регистрация: 24.01.2004
Возраст: 45
|
Код:
// Что-то вроде этого..
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. |
|
|
|
|
#4 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
Вот, кусок кода, правда, на С++, но это почти одно и то же
//--------------------------------------------------------------------------- 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; } //--------------------------------------------------------------------------- |
|
|
|
|
#5 |
|
вЫкинг
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39
|
мда-а-а, короче гемор полный, я вобщем забил с экселем, всем спасибо.
Я решил сделать базу на парадоксе 7 (уже сделал). С парадоксом все охрененно работает, только вот появилась новая проблема: как сделать так штоб прога и на других компах работала, где нет делфи. Просто кода ее переносишь на другой комп она ругаетсмя что типа не распознала тип базы данных. Как мне обяснили она просит драйвер БДЕ, отсюда вопрос: как его поставить отдельно без делфей, а еще лучше чтоб без него все работало. |
|
|
|
|
#6 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
Парадокс - тоже геморрой, индексы падают и проч.
БДЕ надо в инсталлятор включить, как точно - не помню, смотри доку на БДЕ, какие именно файлы и куда включать. Проблема - совместимость, например, ты заранее не знаешь, есть ли БДЕ на машине, какой версии и используется ли другими приложениями. Можно так ее постпвить, что другие приложения отвалятся. Вообще, БДЕ - каменный век. |
|
|
|
|
#7 |
|
вЫкинг
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39
|
zss_vrn млин а че делать?
мне нужно создать простенькую базу данных, я объяснил одному че мне конкретно нужно, он мне сказал что мне нужен Access, тока как его подключить в дельфи я не знаю. Прга короче для учета товара в магазине, сам я не програмист, просто знакомые попросили, а делфи знаю на начальном уровне. |
|
|
|
|
#8 |
|
Gross
|
metallic Обратитесь к профессионалам. Иначе и магазин ждет банкротство.
|
|
|
|
|
#14 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
metallic
Простые проги для юзера - как раз самые сложные для программера ![]() В сбилдере 5 и 6 есть компоненты для работы с екселем. Они довольно просты - глянь. Я не пользовал, но проверял - работают. Правда,если есть калькулятор и ексель - зачем еще и прогу городить? Если юзер с екселем не справится, то с самопальной прогой еще хуже ![]() Или все же к аксессу надо? Если к аксессу - то можно через ODBC->BDE... |
|
|
|
|
#15 |
|
Форумец
Сообщений: 4,909
Регистрация: 08.04.2003
Возраст: 42
|
Или все же к аксессу надо? Если к аксессу - то можно через ODBC->BDE...
Мне интересно как можно работать с сервером автоматизации через odbc или там bde? Если же речь идет о Jet то опять же не понимаю нахрена odbc и тем паче bde. |
|
|
|
|
#16 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
zic
Сервер автоматизации? Но к вопросу можно подойти, как к серверу БД! Очень просто. 1. Указываем в качестве источника данных ODBC "База данных MS ACESS" (Панель управления->Администрирование->Источники данных ОDBC...) 2. Прописываем алиас в BDE на этот источник данных. 3. Работаем в проге через стандартные компоненты. Так можно цеплять и ексель, если приспичит, но, конечно, файл ексель должен иметь структуру таблицы. |
|
|
|
|
#19 |
|
вЫкинг
Сообщений: 2,691
Регистрация: 31.07.2004
Возраст: 39
|
Все я разобрался как ацесовскую базу прицепить в делфи, осталось тока придумать как в нее картинок напихать.
Оказалось там сложнее с этим чем в парадоксе. Кто нить может рассказать как влепить картинку в базу. |
|
|
|
|
#21 |
|
Форумец
Сообщений: 4,909
Регистрация: 08.04.2003
Возраст: 42
|
zss_vrn
субд ,часть windows, access это лишь примитивный фронтэнд к ней, работающий через кривую жопу - mda metallic просто клади картинки в поля blob, типа image в jet по моему нет. fishca Да хоть 2006. |
|
|
|
|
#22 | |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
fishca
Цитата:
Visual Studio NET имеет перспективы, равно как и Java. Все остальное, имхо, ждет судьба FoxPro и т.д. Я говорю только об офисных приложениях. zic Блин, стока лет имею дело с Win, а этого не знаю. Век живи, век учись - один хрен, дураком помрешь
|
|
|
|
|
|
#23 |
|
Форумец
|
zss_vrn
Delphi - это не только VCL, а среда быстрой разработки ![]() Visual Studio NET - среда быстрой разработки И чем же одно перспективней другого? И там и там можно клепать приложения как для .Net так и для Win32. |
|
|
|
|
#25 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
fishca
Дельфи - среда быстрой разработки, основанная на собственной компанентной модели, которая является оберткой родного API. VS NET и DELPHI.NET- то же, но компонентная модель - уже часть системы, то есть, made by MS. У борланда больше нет преимущества, которое было раньше, то есть, удачной объектной модели. Зато есть недостатки, например, только один язык - паскаль. Но это - мелочи, главное, что теперь борланду приходится играть "на чужом поле", и выиграть конкурентную борьбу с MS в таких условиях вряд ли возможно. К этому стоит добавить, что дельфи "за бугром" и раньше не пользовалась таким спросом, как у нас, а сейчас - тем более. Следовательно, спец по дельфи при прочих равных имеет меньшую ценность нежели спец по VS NET, ему можно меньше платить. Вывод - дельфи имеет мало перспектив. |
|
|
|
|
#27 |
|
Вселённый...
Сообщений: 522
Регистрация: 03.01.2003
Возраст: 47
|
metallic Как профессиональный программист начинающему программисту - поскольку ты использовал Paradox (встроенный в Delphi), а он соотвественно использует BDE (Borland DataBase Engine - Машина баз данных). То для использования таких программ на других машинах необходимо проинсталлировать BDE соотвестенно.
Сделать это можно, грубо говоря, двумя путями: 1. Взять дистрибутив Дельфи и происталлировать на компах где будет использоваться данная программа исключительно только BDE. 2. Создать к своей программе с помощью поставляемого с Дельфи пакета InstallShield инсталлятор, в который необходимо включить BDE. Иными слова твоя прога будет инсталлироваться как все программы, например, тот же MS Office и прочие. |
|
|