Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
1

Загрузка новосозданного Excel файла

08.01.2017, 21:11. Показов 1538. Ответов 19
Метки нет (Все метки)

Возможно, не ясно сформулировал название темы но суть такова:

имеется две формы:
первая форма отображает список предприятий.
По умолчанию 5 предприятий.
Они выбираются в combobox после чего их показатели из Excel файла загружаются в stringGrid. Тут проблем нет


На второй форме добавляется новое предприятие. Вводятся его показатели (Stringgrid) и имя предприятия (Edit) после чего сохраняется в папке с проектом и носит название *edit*.xlsx. Тут тоже проблем нет.

Как реализовать, то чтобы новосозданное предприятие добавлялось в Combobox в качестве шестого предприятия. Что бы его название передавалось в combox? И соответсвенно была возможность загрузить его показатели в первой форме. И так далее седьмого, восьмого и тд предприятий.

Вот так идет загрузка предприятий :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/deneb.xlsx');
Excel.DisplayAlerts:=False;
 
if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
 
Excel.Quit;

Вот так сохранение предприятия на второй форме
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
 ExcelApp, Sheet: variant;
 Col, Row: Word;
begin
 
  ExcelApp := CreateOleObject('Excel.Application');
  try
    ExcelApp.Visible := false;
 
    ExcelApp.Workbooks.Add;
    Sheet := ExcelApp.ActiveWorkbook.Worksheets[1];
 
    for Col := 0 to StringGrid1.ColCount - 1 do
      for Row := 0 to StringGrid1.RowCount - 1 do
        Sheet.Cells[Row + 1, Col + 1] := StringGrid1.Cells[Col, Row];
 
    ExcelApp.ActiveWorkbook.SaveAs(GetExcelFileName);
 
    ShowMessage('Ok!');
  finally
    ExcelApp.Application.Quit;
    ExcelApp := unassigned;
  end;
 
end;
В общем новое предприятие должно попасть в список к остальным и быть там при последующих запусках.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2017, 21:11
Ответы с готовыми решениями:

Загрузка из Blob на сервере Excel файла и выгрузка его в память с целью вывода на клиенте для просмотра
Здравствуйте, есть следующая функция //Загрузка файла из таблицы BLOBS function...

Загрузка из файла Excel
7.7 сетевая (7.70.025),Торговля и склад 7.70.011 Написал код для выгрузки в файл Excel-все...

Загрузка Excel файла
Вот страница загрузки xls файла. if(isset($_POST)){ $lunch = new PanelLh; ...

Загрузка файла Excel в DataGridView
Всем привет! Столкнулся с очень интересной задачей, у меня не получается загрузить файл good.xls в...

19
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
08.01.2017, 21:29 2
а как предыдущие пять попали в комбо?
0
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
08.01.2017, 21:48  [ТС] 3
Добавлены в ручную в Item и написан код для их выборки. Созданные предприятия даны по умолчанию.
А программа должна предусматривать возможность добавления новых предприятий через программу. Первые пять предприятий созданы заранее в Excel
0
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
08.01.2017, 23:53 4
Лучший ответ Сообщение было отмечено Shamil_ как решение

Решение

в голову приходит наверное очевидное решение - читать список предприятий из файла
поиск - delphi работа с ini файлом

или план Б - читать список Excel файлов и загружать его в комбо при старте программы
соответственно
поиск - Delphi список файлов заданного типа
1
1322 / 1111 / 196
Регистрация: 04.04.2011
Сообщений: 3,848
09.01.2017, 17:02 5
Несколько странное использование Excel-ввода в Delphi-приложении. Но если надо..
В Excel написать макрос загрузки комбобокса значениями из БД и выполнять его одним из способов:
а) по событию открытия в книге в самом экселе
б) из Delphi-приложения сразу после открытия (но до визуализации) книги.
1
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
10.01.2017, 09:06  [ТС] 6
Цитата Сообщение от krapotkin Посмотреть сообщение
или план Б - читать список Excel файлов и загружать его в комбо при старте программы
соответственно
это конечно хорошо, но дело в том, что мне нужно чтобы не только выводились предприятия, но была возможность вывести показатели данного предприятия за определенный год, который выберет пользователь. Кстати возможность выбрать год осуществляется в Combobox2.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm2.btn1Click(Sender: TObject);
 var
i,j,listik: integer;
Excel: variant;
 
begin
if Cbb1.ItemIndex=0 then// здесь происходит выборка предприятия
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/deneb.xlsx');
Excel.DisplayAlerts:=False;
if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then// здесь выборка данных предприятий по годам и возможность вывести все года разом
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
Этот код у меня повторяется еще для 4 предприятий. Так вот если я сделаю, как вы сказали,
Цитата Сообщение от krapotkin Посмотреть сообщение
или план Б - читать список Excel файлов и загружать его в комбо при старте программы
соответственно
то как мне оптимизировать код, ведь после загрузки нового Excel файла в комбо при старте, прога не будет писать для него код и следовательно второй комбо будет бесполезен.
Вопрос в чем, можно ли оптимизировать код что он выводил не только предприятия которые по умолчанию в проге, но и новоподгружаемые ???
0
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
10.01.2017, 09:47 7
Лучший ответ Сообщение было отмечено Shamil_ как решение

Решение

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

вот это - дорога в ад:
Цитата Сообщение от Shamil_ Посмотреть сообщение
if Cbb2.ItemIndex=0 then
названия компонентов и переменных не несут смысла
жесткое кодирование 0 в коде. Как потом быть, если надо изменить что-то?
искать этот 0 по всей программе?

вот как должен бы выглядеть код. каждая процедура делает одно действие,
понятное из названия процедуры.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TMainForm.FormCreate(Sender:TObject);
begin
  LoadAvailableFileList(List);
  FillEnterprisesCombo(List);
end;
 
procedure TMainForm.cbEnterprisesChange(Sender:TObject);
begin
  if cbEnterprises.ItemIndex=-1 then
    ClearYearsCombo()
  else
    FillYearsCombo(List[cbEnterprises.ItemIndex]);
end;
при старте заполняем комбо с предприятиями. Возможно, первым пунктом туда стоит добавить
'Выберите предприятие...'
тогда логика чуть чуть изменится, но идея та же
При выборе предприятия заполняется комбо с доступными годами
При выборе года выводится результат.
Четкий понятный сценарий
1
1322 / 1111 / 196
Регистрация: 04.04.2011
Сообщений: 3,848
10.01.2017, 13:24 8
Shamil_,
У Вас каша в голове и в коде. Вы определитесь, какой функционал должен быть в приложении (Delphi), а какой в Excel.
Если Excel нужен для ввода данных с выбором из справочников БД,в т.ч. контекстный, т.е. когда выбирается сначала, например, склад, а потом товар на складе,- то заполнение эксельных комбобокосов должно выполняться в самом экселе - по событиям соотв.элементов делать запросы к БД и заполнять списки. Но, как по мне, это неудачный интерфейс - сначала запускать приложение Delphi, а потом "внутри него" вводить данные в Excel
Правильным решением обычно является такой: весь функционал работы с БД (в т.ч. добавление, удаление, правка) делается в Delphi, а вот отчет выводится через шаблон Excel, в котором по необходимости предусмотреть доп.код (макросы) для оформления (итоги, группировки, выделения и т.д.)
0
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
11.01.2017, 10:11  [ТС] 9
Цитата Сообщение от MsGuns Посмотреть сообщение
Shamil_,
У Вас каша в голове и в коде. Вы определитесь, какой функционал должен быть в приложении (Delphi), а какой в Excel.
Каша не у меня в голове, а у моего научного руководителя, которая после каждой встречи с ней предъявляет новые требования к моей проге. Вначале требовалось выводить только 5 предприятий вот я "накалялкал" код, потом преподша сказала, необходимо чтоб твоя программа предусматривала добавление новых предприятий. Вот и возникла у меня проблема с кодом.

А что насчет функционала, то моя программа должна создавать новые Excel файлы и выводить вычисления(имеется введу не просто вывести, а вывести с возможностью выбора года или показателя и т.д.)

И не надо так умничать, я еще салага в программирования.

Добавлено через 2 минуты
Цитата Сообщение от krapotkin Посмотреть сообщение
LoadAvailableFileList(List);
При компиляции показывает ошибку, "Идентификатор не объявлен", как объявить ??
0
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
11.01.2017, 12:54 10
LoadAvailableFileList - это процедура, которую НУЖНО НАПИСАТЬ
и как следует из названия, она должна загружать список доступных файлов в переменную List
параметр List - это и есть список, куда попадут доступные файлы.
Например, для этого подойдет TStringList
Например
Delphi
1
2
3
4
5
6
7
8
9
10
11
TMainForm=class(TForm)
...
  FileList:TStringList;
end;
 
procedure TMainForm.FormCreate(Sender:TObject);
begin
  FileList := TStringList.Create;
  LoadAvailableFileList(FileList);
  FillEnterprisesCombo(FileList);
end;
1
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
11.01.2017, 13:11  [ТС] 11
krapotkin,
Спасибо сейчас протестирую.
А да , один момент , что делать с этим кодом
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm2.btn1Click(Sender: TObject);
 var
i,j,listik: integer;
Excel: variant;
 
begin
if Cbb1.ItemIndex=0 then// здесь происходит выборка предприятия
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/deneb.xlsx');
Excel.DisplayAlerts:=False;
if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then// здесь выборка данных предприятий по годам и возможность вывести все года разом
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
удалить его ???
0
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
11.01.2017, 14:55 12
зачем? просто он содержит не одно действие а целую тучу, да еще с условиями
по идее, нужно сделать реально необходимые вам процедуры, например
LoadFromExcelFile(fileName:string);
она будет содержать только код загрузки информации из нужного файла в StringGrid
для ее вызова данные подготовите предварительно в обработчиках комбобоксов
1
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
11.01.2017, 16:43  [ТС] 13
Уважаемый, krapotkin!
Если вас не затруднит, не могли бы написать как все должно примерно выглядеть(если не лень). Я в программировании "чайник" и со так легко слов не могу понять.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ExtCtrls, ComObj, Menus;
 
type
  TForm2 = class(TForm)
    pnl1: TPanel;
    cbb1: TComboBox;
    cbb2: TComboBox;
    pnl2: TPanel;
    StringGrid1: TStringGrid;
    btn1: TButton;
    btn2: TButton;
    lbl1: TLabel;
    lbl2: TLabel;
    MainMenu1: TMainMenu;
    N2: TMenuItem;
    N1: TMenuItem;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
     function GetExcelFileName: String;
    procedure N2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
   const
  EXCEL_FILE_EXT = '.xlsx';
 
implementation
 
uses Unit1;
 
{$R *.dfm}
 
procedure TForm2.btn1Click(Sender: TObject);
 var
i,j,listik: integer;
Excel: variant;
 
begin
if Cbb1.ItemIndex=0 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/deneb.xlsx');
Excel.DisplayAlerts:=False;
if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
 
     StringGrid1.ColWidths[0] := 260;
 
  if Cbb1.ItemIndex=1 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/Gormolzavod.xlsx');
Excel.DisplayAlerts:=False;
 if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
 
 
 
 if Cbb1.ItemIndex=2 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/Hlebozavod.xlsx');
Excel.DisplayAlerts:=False;
 if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
 
 if Cbb1.ItemIndex=3 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/Kizlyargrokompleks.xlsx');
Excel.DisplayAlerts:=False;
    if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
 
 
  if Cbb1.ItemIndex=4 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add(ExtractFilePath(Application.ExeName)+'/Richalsu.xlsx');
Excel.DisplayAlerts:=False;
      if Cbb2.ItemIndex=0 then
begin
with StringGrid1 do
  for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
    Cells[j, i]:=Excel.WorkSheets.Item[1].Cells[i+1, j+1];
Excel.Quit;
end;
if Cbb2.ItemIndex>0 then
begin
with StringGrid1 do
  for i:=0 to 20 do
  begin
    Cells[0, i]:=Excel.WorkSheets.Item[1].Cells[i+1, 1];
 
  end;
    for i:=0 to 20 do
    StringGrid1.Cells[1, i]:=Excel.WorkSheets.Item[1].Cells[i+1, Cbb2.ItemIndex+1];
Excel.Quit;
end;
end;
 
end;
 
procedure TForm2.btn2Click(Sender: TObject);
  var
i,j:integer;
begin
 with StringGrid1 do
  for i:=FixedCols to ColCount-1 do
  for j:=FixedRows to RowCount-1 do
    Cells[i, j]:='';
   
end;
procedure TForm2.btn3Click(Sender: TObject);
begin
Form1.Show ();
 Form2.Close;
end;
 
procedure TForm2.btn4Click(Sender: TObject);
begin
StringGrid1.Options:=StringGrid1.Options+[goEditing];
end;
 
function TForm2.GetExcelFileName: String;
begin
 if Cbb1.ItemIndex=0 then
  Result := ExtractFilePath(Application.ExeName) + 'deneb';
  if Cbb1.ItemIndex=1 then
  Result := ExtractFilePath(Application.ExeName) + 'Gormolzavod';
  if LowerCase(ExtractFileExt(Result)) <> EXCEL_FILE_EXT then
    Result := Result + EXCEL_FILE_EXT;
end;
 
procedure TForm2.btn5Click(Sender: TObject);
var
 ExcelApp, Sheet: variant;
 Col, Row: Word;
begin
 
  ExcelApp := CreateOleObject('Excel.Application');
  try
    ExcelApp.Visible := false;
 
    ExcelApp.Workbooks.Add;
    Sheet := ExcelApp.ActiveWorkbook.Worksheets[1];
 
    for Col := 0 to StringGrid1.ColCount - 1 do
      for Row := 0 to StringGrid1.RowCount - 1 do
        Sheet.Cells[Row + 1, Col + 1] := StringGrid1.Cells[Col, Row];
 
    ExcelApp.ActiveWorkbook.SaveAs(GetExcelFileName);
 
    ShowMessage('Ok!');
  finally
    ExcelApp.Application.Quit;
    ExcelApp := unassigned;
  end;
 
end;
 
 
 
procedure TForm2.N2Click(Sender: TObject);
begin
    Form1.Show ();
end;
0
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
11.01.2017, 21:26 14
тогда нужно полное описание что должно происходить
шаг за шагом
на внятном русском языке
0
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
12.01.2017, 10:31  [ТС] 15
- на первом шаге выбираем доступные нам предприятия, которые находятся в папке с проектом(данные хранятся в Excel).
Цитата Сообщение от krapotkin Посмотреть сообщение
или план Б - читать список Excel файлов и загружать его в комбо при старте программы
соответственно
- на втором шаге выбираем год, т.е. также подгружаются года доступные по выбранному предприятию, но есть одно но, в этом комбо первым Items у меня - "Вывести за все года", т.е. можно вывести все года разом , либо вывести по одному.

так выглядит таблица с данными

Показатели201020112012201320142015
Выручка131495910893231247190120043712185351264101
Себестоимость продаж-957907-849049-964676-974405-1015252-1042710
Валовая прибыль (убыток)357052240183282514226032203283221391
Коммерческие расходы-35090-15389-13777-17514-10625-20668
Управленческие расходы000000
Прибыль (убыток) от продаж321962224794268737208518192658200723
Доходы от участия в других организациях000000
Проценты к получению182542632547434856
Проценты к уплате-87645-87195-72949-57216-32670-15463
Прочие доходы431793759680549247571642027912
Прочие расходы-61386-72115-101854-47259-58449-82663
Прибыль (убыток) до налогообложения217935107343177075128843118007130565
Текущий налог на прибыль-47202-26598-40193-28929-30695-37961
Постоянные налоговые обязательства (активы)-4272-3725-2622-1846-672-10188
Изменение отложенных налоговых обязательств-724122921091204944723
Изменение отложенных налоговых активов9717661110164122
Прочее04390-5030-2583
Чистая прибыль (убыток)170106825891390521007258842090602

- шаг 3 нажимаем Вывести и соответственно выводятся показатели.

- шаг 4 очищаем

Надеюсь получилось написать
Цитата Сообщение от krapotkin Посмотреть сообщение
на внятном русском языке
0
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
12.01.2017, 10:34  [ТС] 16
https://www.cyberforum.ru/atta... 1484206679

Вот так выглядит форма , на которой это все и осуществляется !
0
Миниатюры
Загрузка новосозданного Excel файла  
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
12.01.2017, 13:09 17
Лучший ответ Сообщение было отмечено Shamil_ как решение

Решение

чудесно.
я правда, не вижу для себя необходимости тотально все делать за вас, поэтому вот код, структурно правильный, но в котором не дописан функционал по загрузке данных
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, StdCtrls;
 
type
  TForm1 = class(TForm)
    cbEnterprises: TComboBox;
    cbYears: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure cbEnterprisesChange(Sender: TObject);
    procedure cbYearsChange(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    List:TStringList;
    Years:TStringList;
    procedure FillEnterprisesCombo(list:TStrings);
    function GetFilesPath: string;
    procedure FillYearCombo(fileName: string);
    procedure GetYears(fileName: string; Years: TStrings);
  public
    ds1index:integer;
    ds2index:integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
resourcestring
  sSelectEnterprise = 'Выберите предприятие...';
  sNoAvailableData = 'Нет доступных данных';
  sForAllYears = 'За все годы';
 
{$R *.dfm}
 
procedure FindFiles(Path:string; List:TStrings);
var R:TSearchRec;
begin
  if FindFirst(path,faAnyFile and (not faDirectory),r)=0 then
  begin
    repeat
      List.Add(r.Name);
    until FindNext(r) <> 0;
    FindClose(r);
  end;
end;
 
 
function TForm1.GetFilesPath:string;
begin
  Result := ExtractFilePath(ParamStr(0))+'files\*.xlsx';
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  List:=TStringList.Create;
  Years:=TStringList.Create;
  FillEnterprisesCombo(list);
  FillYearCombo('');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  list.Free;
  Years.Free;
end;
 
procedure TForm1.cbEnterprisesChange(Sender: TObject);
begin
  if cbEnterprises.ItemIndex<1 then
    FillYearCombo('');
end;
 
procedure TForm1.GetYears(fileName:string; Years:TStrings);
begin
  Years.Clear;
  if (FileName<>'')and(FileExists(GetFilesPath+FileName)) then
  begin
    // здесь код, который открывает файл GetFilesPath+Filename
    // смотрит, какие года в нем доступны
    // добавляет эти года в Years
  end;
end;
 
procedure TForm1.LoadData(FileName:string; Year:string);
begin
  // здесь код, который загружает данные из файла FileName за все годы
  // если Year=''
  // и за конкретный год, если Year заполнен
end;
 
procedure TForm1.FillYearCombo(fileName:string);
begin
  if (FileName<>'')and(FileExists(GetFilesPath+FileName)) then
  begin
    GetYears(fileName, Years);
    if Years.Count>0 then
    begin
      Years.Insert(0,sForAllYears);
      exit;
    end;
  end;
  // если что-то пошло не так, очищаем список доступных лет
  cbYears.Clear;
  cbYears.items.Add(sNoAvailableData);
  cbYears.ItemIndex := 0;
end;
 
procedure TForm1.cbYearsChange(Sender: TObject);
var
  fileName:string;
  year : string;
begin
  if cbYears.ItemIndex=-1 then
    exit;
 
  if cbEnterprises.ItemIndex<1 then
    exit;
 
  fileName := GetFilesPath + cbEnterprises.Items[cbEnterprises.ItemIndex];
  if cbYears.ItemIndex=0 then
  begin
    if cbYears.Items[0]<>sNoAvailableData then
    begin
      LoadData(fileName, '');
    end;
  end
  else
  begin
    Year := cbYears.Items[cbYears.ItemIndex];
  end;
end;
 
procedure TForm1.FillEnterprisesCombo(List:TStrings);
var
  i: Integer;
begin
  cbEnterprises.Clear;
  cbEnterprises.Items.Add(sSelectEnterprise);
  for i := 0 to List.Count-1 do
  begin
    cbEnterprises.Items.Add(list[i]);
  end;
  cbEnterprises.ItemIndex :=0;
end;
 
end.
1
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
12.01.2017, 13:14  [ТС] 18
krapotkin,вы мегамозг, благодарю вас !!!
0
4976 / 3877 / 1287
Регистрация: 14.04.2014
Сообщений: 17,882
Записей в блоге: 18
12.01.2017, 13:19 19
строки 76-77 не дописаны остались


Delphi
1
2
3
4
if cbEnterprises.ItemIndex<1 then
    FillYearCombo('')
  else 
    FillYearCombo(cbEnterprises.Items[cbEnterprises.ItemIndex])
1
0 / 0 / 0
Регистрация: 02.01.2017
Сообщений: 12
12.01.2017, 13:33  [ТС] 20
krapotkin, все, записал, еще раз огромное спасибо !
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2017, 13:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Загрузка Excel-файла из BLOB
Здравствуйте. Каким способом можно загрузить xls файл из blob поля на сервере oracle с загрузкой...

Загрузка данных из файла Excel в DataGridView
Здравствуйте! Есть проблема. Программа по нажатию кнопки на форме, должна считать файл Excel и...

Загрузка файла Excel из ресурсов программы
Собственно вот. Как загрузить Excel из файла я знаю. А если я этот файл закину в ресурсы? Как его...

Генерация и загрузка excel-файла с сервера
Добрый день. С перлом работаю недавно, возникла такая проблема. Необходимо сгенерировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.