Модераторы: MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поммогите сохранить в Excel, ОпенДиалога и с использованием.... 
:(
    Опции темы
EvilProgrammer
Дата 21.7.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Помогите пожалуйста решить эту проблему.
Есть такой код:
Код
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    ExcelApp:= CreateOleObject('Excel.Application');
    Workbook:= ExcelApp.Workbooks.Open(FileName:= FileListBox1.FileName);
    ExcelApp.Visible:= false;
    ExcelApp.EnableEvents:= False;
    ExcelApp.Application.DisplayAlerts:= False;

end;




Тут я открываю файл через ФайлЛистБокс1. Я решил упростить процесс поиска файла без использования ОпенДиалога.
Потом мне нужно пересохранить этот файл при помощи ДиректориЛистБокс2 и ФайлЛистБокс2, но так что бы изменлися лишь путь к каталогу а его имя осталось без изменений. Я попробовал так...
Код
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  SPathName:= DirectoryListBox2+copy(FileListBox1.FileName);
  ExcelApp.ActiveWorkbook.SaveAs(FileName:= SPathName, FileFormat:= -4158);
  ExcelApp.Workbooks.Close;
  ExcelApp.Quit;
end;



SPathName: string;

Как правильно указать путь сохранения? smile Заранее благодарен. 
PM MAIL   Вверх
Albinos_x
Дата 21.7.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



не совсем понял вопроса....

не получается получить путь?
или сохранение? 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 21.7.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_x, не получается получить путь smile 
Я хочу сделать так чтобы поменялся только каталог, а имя файла осталось прежним.
Для указания каталога я использую DirectoryListBox2.  

Это сообщение отредактировал(а) EvilProgrammer - 21.7.2006, 14:31
PM MAIL   Вверх
Albinos_x
Дата 21.7.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата
function ExtractFileName(const FileName: string): string;   Извлекает из строки с полным именем файла FileName часть, содержащую его имя и расширение. 


Добавлено @ 16:34 
советую скачать  DRKB (Delphi Russian Knowledge Base) (http://www.drkb.ru/)

Цитата(Правила форума "Delphi: ActiveX/СОМ/CORBA")

90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Добавлено @ 16:37 
ЗЫ: Это вопрос раздела Delphi: Общие вопросы 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 23.7.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_x, Спасибо за совет. DRKB я уже скачал. Как я уже говорил, я только начинаю программировать поэтому орехов не избежать. Книги и ФАКи это хорошо, но советы и подсказки квалифицированных программистов намного ценнее.  
PM MAIL   Вверх
Albinos_x
Дата 23.7.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



PS: Мне интересно, почему делаешь сохранение через Excel, а не пользуешся копированием файлов? 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 24.7.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_xsmile я только начал этим заниматься. Мне показалось что использовать Excel целесообразно т.к. работаю с его файлами.
Вроде не нужно мучатся с конвертированием, достаточно просто указать в каком формате сохранить файл. Как уже говорил раньше, написал программку которая просто замечательно работает с одним файлом (их можна конвертировать по очереди), при этом я использовал Excel и OpenDialog/SaveDialog. Потом у меня родилась идея сделать программу без OpenDialog/SaveDialog с использовпанием дерева каталогов и FileListBox, это бы намного упростило процесс поиска и открытия нужного файла. На данный момент у меня получилось загрузить нужный мне файл через FileListBox. Теперь я тружусь над тем, чтобы этот файл можно было так же легко положить туда куда мне нужно без изменения имени этого файла, но в другом формате (Из *.xls надо сделать *.txt). 
В конечном итоге программа должна оперировать не с одним файлом, а с целым каталогом в котором хранятся файлы *.xls, которые нужно пересохранить в *.txt в указанный каталог.

Если есть какие-нибудь примеры или советы я буду очень рад, потому как у меня нету опыта в создании таких программ. Заранее благодарен.  

Это сообщение отредактировал(а) EvilProgrammer - 24.7.2006, 09:56
PM MAIL   Вверх
EvilProgrammer
Дата 24.7.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



На данный момент есть такой код:
Код
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    ExcelApp:= CreateOleObject('Excel.Application');
    Workbook:= ExcelApp.Workbooks.Open(FileName:= FileListBox1.FileName);
    Edit1.Text:= ExtractFilePath(FileListBox1.FileName);
    Edit2.Text:= ExtractFileName(FileListBox1.FileName);
    ExcelApp.Visible:= false;
    ExcelApp.EnableEvents:= False;
    ExcelApp.Application.DisplayAlerts:= False;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  ExcelApp.ActiveWorkbook.SaveAs(FileName:= , FileFormat:= -4158);
  ExcelApp.ActiveWorkbook.Close;
  ExcelApp.Quit;
end;

end.


Не получается заставить прочитать имя файла из Edit2.Text smile 
PM MAIL   Вверх
Albinos_x
Дата 24.7.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



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

Цитата(EvilProgrammer @  24.7.2006,  12:26 Найти цитируемый пост)
Не получается заставить прочитать имя файла из Edit2.Text

 А имя и путь к файлу там есть?
может так:
Код
...
procedure TForm1.BitBtn3Click(Sender: TObject);    
var FileName:String;
begin    
FileName:=FileListBox2.Directory+'\'+Edit2.Text;
  ExcelApp.ActiveWorkbook.SaveAs(FileName, FileFormat:= -4158);    
  ExcelApp.ActiveWorkbook.Close;    
  ExcelApp.Quit;    
end;
...
  

Это сообщение отредактировал(а) Albinos_x - 24.7.2006, 13:16


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 25.7.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_x, все бы хорошо, но только из Эдит он берет имя файла с расширением и потом выдает ошибку, что в имени файла не должно быть запрещенных символов. Можно ли как-то сделать фильтр?


П.С. Хотя с другой стороны создать файл "random.xls.txt" можно без всяких проблем в винде. В чем же тогда баг? Еще у мня появилась мысль о том можно ли каким-то образом заставить Ексель пересохранить файл с тем именем с которым он был открыт, для этого вроде бы не нужно задавать новое имя. Соответственно FileName тогда должен либо вообще отсутствовать либо не содержать имени фалйла. Можно ли так сделать? 

Это сообщение отредактировал(а) EvilProgrammer - 25.7.2006, 11:52
PM MAIL   Вверх
Albinos_x
Дата 25.7.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



У меня в статье было написано, что могут возникать проблемы в методе SaveAs, если путь сохранения содержит русские буквы (т.е. отличные от латинского алфавита)... Может в этом проблема.... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 26.7.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_x, нет-нет тут дело не в этом. Все файлы содержатлатинские буквы. Как уже говрил это файлы отчетности по месяцам/неделям/дням и т.д.


Просто когда выполняется 
Код
FileName:= FileListBox2.Directory+'\'+FileListBox1.FileName;
    ExcelApp.ActiveWorkbook.SaveAs(FileName, FileFormat:= -4158);


то в переменную берется FileName записывается значение "random.xls" к которому потом добавляется расширение .txt и вот после этого программа выдает сообщение что так делать нельзя. 

По-поводу загрузки целого каталога в Ексель у меня повилась такая идея. Правда немного коряво но надеюсь что потом несколько модернизирую.
Код
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  SearchRec: TSearchRec;
begin
  if FindFirst(FileListBox1.FileName, faAnyFile, SearchRec)=0 then
    repeat
    ExcelApp:= CreateOleObject('Excel.Application');
    Workbook:= ExcelApp.Workbooks.Open(FileName:= FileListBox1.FileName);
    Edit1.Text:= ExtractFilePath(FileListBox1.FileName);
    Edit2.Text:= ExtractFileName(FileListBox1.FileName);
    ExcelApp.Visible:= false;
    ExcelApp.EnableEvents:= False;
    ExcelApp.Application.DisplayAlerts:= False;
    FileName:= 'C:\ConvertFiles\'+FileListBox1.FileName;
    ExcelApp.ActiveWorkbook.SaveAs(FileName, FileFormat:= -4158);
    ExcelApp.ActiveWorkbook.Close;
    ExcelApp.Quit;
   until FindNext(SearchRec)<>0;
   FindClose(SearchRec);
end;

 
Правда причина остается той же smile 
Выдается такой сабж:
Файл не доступен.
1. проверьте создана ли директория? (создана)
2. Открыта ли директория для записпи (открыта)
3. Имя файла не должно содеражать знаков (не содержит)
4. Полный путь к файлу не должен превышатьт 218 символов. (не привышает)

Помогите!!! В чем же дело? 

Это сообщение отредактировал(а) EvilProgrammer - 26.7.2006, 10:46
PM MAIL   Вверх
Albinos_x
Дата 26.7.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата(EvilProgrammer @  26.7.2006,  10:14 Найти цитируемый пост)
нет-нет тут дело не в этом. Все файлы содержатлатинские буквы. Как уже говрил это файлы отчетности по месяцам/неделям/дням и т.д.

не только файлы но и путь к файлу....

Приведённый код не совсем удачный, т.к. по нему получается что прочитаешь и сохранишь ты "один и тот же файл в один и тот же файл"... а он может ещё не освободиться для перезаписи... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 28.7.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_x, Сказать по правде я уже немного запутался. smile 
PM MAIL   Вверх
Albinos_x
Дата 28.7.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Не понял... в чём запутался? 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
EvilProgrammer
Дата 9.8.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 18.7.2006

Репутация: нет
Всего: нет



Albinos_x, Огромное спасибо.
Уже все работает. 
Программ функцилонирует. smile
Теперь пишу ее более усовершенствованный вариант.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.