Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 19:53   #1
rob7777
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 52
По умолчанию Delphi и Excel

Добрый день! У меня есть 2 excel файла("2012","2013"). Я читаю из них нужную мне информацию и выношу на график.
Код:
procedure TForm9.Button1Click(Sender: TObject);
begin
Ap1:=CreateOleObject('Excel.Application');                        //1ый файл
Ap1.Workbooks.Open(ExtractFilePath (ParamStr(0)) + '2012.xlsx');
Ap2:=CreateOleObject('Excel.Application');                        //2ой файл
Ap2.Workbooks.Open(ExtractFilePath (ParamStr(0)) + '2013.xlsx');

mas1[1]:=Ap1.Cells[99,12].Value;         //выписываю информацию в массив
mas1[2]:=Ap2.Cells[99,12].Value;   //деньги
mas[1]:=Ap1.Cells[99,11].Value;
mas[2]:=Ap2.Cells[99,11].Value;     //тонны
chart1.Series[0].Add(Round(StrtoFloat(mas1[1])/1000),'2012',random($FFFFFF));           //вывожу на график
chart1.Series[0].Add(Round(StrtoFloat(mas1[2])/1000),'2013',random($FFFFFF));

chart2.Series[0].Add(StrtoFloat(mas[1]),'2012',random($FFFFFF));
chart2.Series[0].Add(StrtoFloat(mas[2]),'2013',random($FFFFFF));    
end;
ВОПРОС: Количество этих файлов с каждым кодом будет увеличиваться. "2014","2015" и т.д. Как сделать, чтобы программа обрабатывала не только эти два файла, а все в зависимости от текущего года(это может вводить пользователь например). Я собственно не понимаю, как открывать эти файлы. Ведь "Ap1,Ap2 и т.д." я объявляю в начале...
rob7777 вне форума Ответить с цитированием
Старый 10.02.2014, 20:26   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Добавить поле ГОД и засунуть всю информацию в один файл
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2014, 20:35   #3
rob7777
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Добавить поле ГОД и засунуть всю информацию в один файл
Ну это самый крайний вариант, вообще так очень не хотелось бы.
rob7777 вне форума Ответить с цитированием
Старый 10.02.2014, 20:56   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А в чем проблема вместо забитой константы '2012.xlsx' использовать строковую переменную с нужным номером года? Аналогично для '2013.xlsx' и всех жестко пробитых годов в проге
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2014, 21:10   #5
rob7777
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 52
По умолчанию

проблема в том, что мне нужно открыть их всех одновременно. Там график сравнения, и я все эти значения должен вывести на график.

за все года

Вот вариант,но где-то ошибка.
Код:
procedure TForm9.Button1Click(Sender: TObject);
var u,f,i:integer;  l: array[1..250] of string;
begin
u:=2;    //количество файлов(может задавать пользователь)
f:=2012; //год, с которого ведется отсчет
for i:=1 to u do begin
l[i]:=Inttostr(f);         //записываем в массив названия файлов, исходя из их количества
f:=f+1
                end;

Ap1:=CreateOleObject('Excel.Application');

for i:=1 to 1000 do    //1000 лет:)
if FileExists(ExtractFilePath (ParamStr(0)) + Pchar(l[i])) then begin   //если есть такой файл

Ap1.Workbooks.Open(ExtractFilePath (ParamStr(0)) + Pchar(l[i]));    //открываем его
mas1[1]:=Ap1.Cells[99,12].Value;                                    //выписываем значения
mas[1]:=Ap1.Cells[99,11].Value;
chart1.Series[0].Add(Round(StrtoFloat(mas1[1])/1000),Pchar(l[i]),random($FFFFFF));  //заполняем график
chart2.Series[0].Add(StrtoFloat(mas[1]),Pchar(l[i]),random($FFFFFF));
Ap1.Workbooks.Close;    //закрываем файл и начинаем сначала
                                                                                  end;

end;

Последний раз редактировалось Stilet; 10.02.2014 в 21:33.
rob7777 вне форума Ответить с цитированием
Старый 10.02.2014, 21:44   #6
rob7777
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 52
По умолчанию

Все сделал!!!!!!!!!
Вот код,если кому понадобится))
Код:
procedure TForm9.Button1Click(Sender: TObject);
var u,f,i:integer;  l: array[1..250] of string;
begin
u:=4;// может вводить пользователь
f:=2012;
for i:=1 to u do begin
l[i]:=Inttostr(f);
f:=f+1;
                end;
Ap1:=CreateOleObject('Excel.Application');

for i:=1 to u do
if FileExists(ExtractFilePath (ParamStr(0)) + l[i] +'.xlsx') then begin
Ap1.Workbooks.Open(ExtractFilePath (ParamStr(0)) + Pchar(l[i]));
mas1[1]:=Ap1.Cells[99,12].Value;
mas[1]:=Ap1.Cells[99,11].Value;
chart1.Series[0].Add(Round(StrtoFloat(mas1[1])/1000),l[i],random($FFFFFF));
chart2.Series[0].Add(StrtoFloat(mas[1]),l[i],random($FFFFFF));
Ap1.Workbooks.Close;
end;

end;
rob7777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi Excel (сохранение записи в Excel) Кас Алина Общие вопросы Delphi 4 28.05.2010 09:17
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл betirsolt БД в Delphi 1 17.01.2010 18:51
ИЗ Delphi в Excel kylebyakaa Общие вопросы Delphi 7 16.04.2009 10:44
Delphi ->Excel->График по таблице->Delphi Avalonix БД в Delphi 2 30.10.2008 14:04
Delphi+Excel Suall БД в Delphi 0 30.04.2007 07:37