Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 960

/ вопрос открыт /

Здравствуйте, эксперты!
Вопрос такой: Я записываю данные в Excel, затем сохраняю его. Мне нужно чтобы при каждом заполнении он создавал новый Excel'евский документ, а не обновлял имеющийся... Следовательно автоматически присваивал документу новое название. Я сохраняю так:

 MyExcel.ActiveWorkbook.SaveAs('Primer.xls');

Примечание #1 (1 апреля 2010, 16:10):
Или, если возможно, как присвоить названию текущую дату и время?

DimkAS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Amidamaru (статус: 4-ый класс), 1 апреля 2010, 16:05 [#2]:

Значит нужно указывать полный путь к файлу.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Вадим К

Вадим К (статус: Академик), 1 апреля 2010, 16:12 [#3]:

Или просто убедиться, что поиск происходит именно в том каталоге, куда планируется сохранение
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 1 апреля 2010, 16:25 [#4]:

Скорей вего DateTimeToStr двоеточия даёт.
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 1 апреля 2010, 16:26 [#5]:

Цитата (DimkAS):

да так я пробовал, он тоже ругается

Спасибо за справедливую оценку. Я так и знал - благими делами выстлана дорога в ад.
Ты, наверное, думаешь, что если у тебя там выдаётся ошибка, то мы тут все видим её текст, да? Если бы у меня были способности телепата, я бы работал не программистом на военном заводе, а экстрасенсом в телевизоре.

З.Ы. Предлагаю админу повесить на этот вопрос золото за апрель.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Amidamaru

Amidamaru (статус: 4-ый класс), 1 апреля 2010, 16:26 [#6]:

Если сразу ставить 1 за ответ, то никто помогать не будет дальше. Подобные комментарии нужно сюда писать. Если это не 1апрельская шутка и вам действительно нужен ответ.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
min@y™

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

Amidamaru (статус: 4-ый класс), 1 апреля 2010, 16:39 [#8]:

вообще думаю не стоит помогать человеку, которому лень написать пару строчек в минифорум, вместо того чтобы сразу ставить оценку.
PS formatDateTime думаю лучше будет :)
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
DimkAS

DimkAS (статус: Посетитель), 1 апреля 2010, 21:16 [#9]:

спасибо народ, я извиняюсь, за все, что не так сделал.
min@y™

min@y™ (статус: Доктор наук), 1 апреля 2010, 21:46 [#10]:

Цитата (DimkAS):

я извиняюсь

Ты не так сделал только одно - полез в программирование. Иди лучше работать начальником: получать будешь намного больше, да и думать не надо. Подписывай бумажки, когда принесут, и попукивай в кожаное кресло... Заодно можно будет бесплатно орать на подчинённых, лишать премий и ставить "1".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DimkAS

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

Amidamaru (статус: 4-ый класс), 3 апреля 2010, 19:37 [#12]:

Тогда уж проще было сделать через реестр, а не через файл...
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
DimkAS

DimkAS (статус: Посетитель), 3 апреля 2010, 20:36 [#13]:

Amidamaru:Я не умею, а как это сделать?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.05 сек.