powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопросик по Delphi&Excel
12 сообщений из 12, страница 1 из 1
Вопросик по Delphi&Excel
    #32330880
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю из Excel столбец с бухгалтерскими данными
Я сам не стронник такого подхода, но других алтернатив нет ...
Там куча пустых ячеек, которые в базу ложить не хотелось бы
в VBA есть спец функция ISEmpty()
Вопрос : как проверить из Delphi программно что данная ячейка не пустая ?

С уважением Jojo
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32330888
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код покажи, где читаешь
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32330891
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FullFileName := formsetup.EditBase.text + '???? ?????????????.xls';

v := CreateOleObject('Excel.Application');
v.Workbooks.Open[ FullFileName];
v.Sheets['??????????'].Activate;

dm.TBase.TableName:='factor.dbf';
dm.TBase.Active:=false;
dm.TBase.Active:=true;

BegStr:=4;
EndStr:=253;

for i:=BegStr to EndStr do
begin
try
if v.Sheets['??????????'].Cells[i, 6].Value<>0 then //Здесь нада проверять
begin
dm.TBase.Append;
dm.TBase.FieldByName('Npp').AsFloat:=(i-3);
dm.TBase.FieldByName('Nfac').AsString:=v.Sheets['??????????'].Cells[i, 4].Value;
dm.TBase.FieldByName('fac_num').AsFloat:=v.Sheets['??????????'].Cells[i, 6].Value;
dm.TBase.FieldByName('fac_pr').AsFloat:=v.Sheets['??????????'].Cells[i, 8].Value;
dm.TBase.Post;
end;
finally
dm.TBase.Append;
dm.TBase.FieldByName('Npp').AsFloat:=(i-3);
dm.TBase.FieldByName('Nfac').AsString:=v.Sheets['??????????'].Cells[i, 4].Value;
dm.TBase.FieldByName('fac_num').AsFloat:=1;
dm.TBase.FieldByName('fac_pr').AsFloat:=1;
dm.TBase.Post;
end;

end;
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32330894
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хотелось бы задавать постоянно
BegStr:=4; -начальная строка чтения в excel
EndStr:=253; - конечная строка чтения в excel
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32330897
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я, may be :), не права, но разве пустые ячейки не кладутся null-ом?

ЗЫ я тут борюсь за чистоту языка: "других альтернатив" не говорят
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32330903
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен :) очень стыдно ... код несимпатичный
Да я млин тока начинаю кодить ...
для меня Null это не заполенное поле ... в базе ...
Чё делать то ? :)
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32331004
Vladimir_t2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать такой вот извратно-нестандартный подход

созтать перебенную - метка valid-ности данных переменную - variant типа
....
var
v:boolean;
test:variant;
........
в начале тела цикла
v:=test;
try
test:=v.Sheets['??????????'].Cells[i, 4].Value;
...............
test:=v.Sheets['??????????'].Cells[i, 8].Value;
except
при присвоении NULL значения VAriant-u возникает искл.сит.
v:=false;
end;

if v then
begin
Код работы с БД
end;


Это только идея.
Надеюсь я верно понял идею вопроса и верно изложил свою идею
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32331007
Vladimir_t2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry за v:=test; здесь v:=true;
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32331017
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в ячейке пусто, то варианту присвоится Unassigned, на его наличие и нужно проверять.
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32331299
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики большое спасибо

Vladimir_t2 попробовал твой совет, все поехало ...

а сделать покрасивей, то получается что ...

test:=Unassigned;
if Assigned(test) ....
***************************
Excel:=StartExcel(True);
Excel.Visible:=false;
ExcelFileOpen(Excel,FullFileName);
Excel.Sheets['Показатели'].Activate;

for i:=BegStr to EndStr do
begin
null:=test;
try
test:=Excel.Sheets['Показатели'].Cells[i, 6].Value;
except
null:=false;
end;
if null then
begin
dm.TBase.Append;
dm.TBase.FieldByName('Npp').AsFloat:=(i-3);
s:=Excel.Sheets['Показатели'].Cells[i, 4].Value;
s:=ReplaceStrAll(s,'.','_');
dm.TBase.FieldByName('Nfac').AsString:='p'+s;
dm.TBase.FieldByName('fac_num').AsFloat:=Excel.Sheets['Показатели'].Cells[i, 6].Value;
dm.TBase.FieldByName('fac_pr').AsFloat:=Excel.Sheets['Показатели'].Cells[i, 8].Value;
dm.TBase.Post;
end;
end;
QuitExcel(Excel);
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32331318
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в одном FAQ нашел полезные функции может кому пригодится
для работы с Excel:

//Запуск Excel
function StartExcel(IsVisible:boolean):variant;
begin
try
result:=UnAssigned;
result:=CreateOleObject('Excel.Application');
result.Visible:=IsVisible;
result.DisplayAlerts:=false;
except
raise Exception.Create('Не могу запустить Excel!');
end;
end;

//Открыть файл
procedure ExcelFileOpen(Excel:variant; FileName:string);
begin
try
Excel.WorkBooks.Open(FileName);
except
raise Exception.Create('Не могу откр файл!');
end;
end;

//Закрыть Excell
procedure QuitExcel(var Excel:variant);
begin
try
Excel.Quit;
finally
Excel:=Unassigned;
end;
end;
...
Рейтинг: 0 / 0
Вопросик по Delphi&Excel
    #32331499
Papka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну раз пошла такая пьянка то

http://delphibase.endimus.ru/?action=viewfunc&topic=winoffice&id=10475
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопросик по Delphi&Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]