| 
| 
 | Вопрос # 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:Я не умею, а как это сделать? |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |