|
Вопрос # 3 960/ вопрос открыт / |
|
Здравствуйте, эксперты!
Вопрос такой: Я записываю данные в Excel, затем сохраняю его. Мне нужно чтобы при каждом заполнении он создавал новый Excel'евский документ, а не обновлял имеющийся... Следовательно автоматически присваивал документу новое название. Я сохраняю так: MyExcel.ActiveWorkbook.SaveAs('Primer.xls');
Примечание #1 (1 апреля 2010, 16:10): Или, если возможно, как присвоить названию текущую дату и время?
 |
Вопрос задал: DimkAS (статус: Посетитель)
Вопрос отправлен: 1 апреля 2010, 14:48
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Amidamaru
Здравствуйте, DimkAS!
Я думаю проще всего использовать например такую функцию:
function GetFreeFileName(const Name, Ext:string):string;
var i:integer;
begin
if not FileExists(Name+Ext) then Result:=Name+Ext
else begin
i:=1;
while FileExists(Name+' ('+IntToStr(i)+')'+Ext) do inc(i);
Result:=Name+' ('+IntToStr(i)+')'+Ext;
end;
end; вот так:
MyExcel.ActiveWorkbook.SaveAs(GetFreeFileName('Primer','.xls'));
 |
Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 1 апреля 2010, 15:04
Оценка за ответ: 1
Комментарий к оценке: почему то у меня он все равно ругается... создает файл с тем же именем
|
Ответ #2. Отвечает эксперт: min@y™
Цитата:
Или, если возможно, как присвоить названию текущую дату и время?
Да вот так:
MyExcel.ActiveWorkbook.SaveAs(DateTimeToStr(Now()) + '.xls');
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 1 апреля 2010, 16:15
Оценка за ответ: 1
Комментарий к оценке: да так я пробовал, он тоже ругается
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 3 апреля 2010, 20:36; участников в обсуждении: 5.
|
Вадим К (статус: Академик), 1 апреля 2010, 15:01 [#1]:
Ну так кто мешает перед открытием скопировать его в временную папку? и там уже открыть.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Amidamaru (статус: 4-ый класс), 1 апреля 2010, 16:05 [#2]:
Значит нужно указывать полный путь к файлу.
|
|
Вадим К (статус: Академик), 1 апреля 2010, 16:12 [#3]:
Или просто убедиться, что поиск происходит именно в том каталоге, куда планируется сохранение
Галочка "подтверждения прочтения" - вселенское зло.
|
|
DNK (статус: Студент), 1 апреля 2010, 16:25 [#4]:
Скорей вего DateTimeToStr двоеточия даёт.
"Digital Networked Knight"
|
|
min@y™ (статус: Доктор наук), 1 апреля 2010, 16:26 [#5]:
Цитата (DimkAS):
да так я пробовал, он тоже ругается
Спасибо за справедливую оценку. Я так и знал - благими делами выстлана дорога в ад.
Ты, наверное, думаешь, что если у тебя там выдаётся ошибка, то мы тут все видим её текст, да? Если бы у меня были способности телепата, я бы работал не программистом на военном заводе, а экстрасенсом в телевизоре.
З.Ы. Предлагаю админу повесить на этот вопрос золото за апрель.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Amidamaru (статус: 4-ый класс), 1 апреля 2010, 16:26 [#6]:
Если сразу ставить 1 за ответ, то никто помогать не будет дальше. Подобные комментарии нужно сюда писать. Если это не 1апрельская шутка и вам действительно нужен ответ.
|
|
min@y™ (статус: Доктор наук), 1 апреля 2010, 16:31 [#7]:
Цитата (DNK):
Скорей вего DateTimeToStr двоеточия даёт.
Ты прав, региональные настройки могут быть разные. У меня она пишет время типа HH.mm am/pm.
Тогда вот так:
function IntToStrLZ(const X, Positions: Integer): string;
begin
Result:= IntToStr(X);
while Length(Result) < Positions do
Result:= '0' + Result;
end;
// полезно для сортировки по дате, типа YYYY_MM_DD_hh_mm_ss
function DateTimeToFileName(const DT: TDateTime): string;
var
Y, M, D, Hr, Mn, Sc, Ms: Word;
begin
DecodeDateTime(DT, Y, M, D, Hr, Mn, Sc, Ms);
Result:= IntToStr(Y) + '_' +
IntToStrLZ(M, 2) + '_' +
IntToStrLZ(D, 2) + '_' +
IntToStrLZ(Hr, 2) + '_' +
IntToStrLZ(Mn, 2) + '_' +
IntToStrLZ(Sc, 2);
end;
MyExcel.ActiveWorkbook.SaveAs(DateTimeToFileName(Now()) + '.xls');
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Amidamaru (статус: 4-ый класс), 1 апреля 2010, 16:39 [#8]:
вообще думаю не стоит помогать человеку, которому лень написать пару строчек в минифорум, вместо того чтобы сразу ставить оценку.
PS formatDateTime думаю лучше будет
|
|
DimkAS (статус: Посетитель), 1 апреля 2010, 21:16 [#9]:
спасибо народ, я извиняюсь, за все, что не так сделал.
|
|
min@y™ (статус: Доктор наук), 1 апреля 2010, 21:46 [#10]:
Цитата (DimkAS):
я извиняюсь
Ты не так сделал только одно - полез в программирование. Иди лучше работать начальником: получать будешь намного больше, да и думать не надо. Подписывай бумажки, когда принесут, и попукивай в кожаное кресло... Заодно можно будет бесплатно орать на подчинённых, лишать премий и ставить "1".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
DimkAS (статус: Посетитель), 2 апреля 2010, 16:19 [#11]:
придумал как сделать, все работает через файл!
Перед этим записываю в него 0
assignfile(ff,'num.txt');
reset(ff);
readln(ff,st);
n:=strtoint(st)+1;
rewrite(ff);
writeln(ff,n);
closefile(ff);
nam:='Primer'+inttostr(n)+'.xls';
MyExcel.ActiveWorkbook.SaveAs(nam);
Все работает! Для надежности можно зашифровать файл!
|
|
Amidamaru (статус: 4-ый класс), 3 апреля 2010, 19:37 [#12]:
Тогда уж проще было сделать через реестр, а не через файл...
|
|
DimkAS (статус: Посетитель), 3 апреля 2010, 20:36 [#13]:
Amidamaru:Я не умею, а как это сделать?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|