Имя: Пароль:
1C
 
как открыть существующий Excel-файл, дописать его и сохранить?
0 Loko
 
28.06.06
08:05
лазил по форуму поиском. ничего толком не нашел. в основном везде идет открытие уже созданного файла. А мне нужно, если в опред. каталоге этого файла нет, то создать его (если он существует, то открыть его). И имеющийся файл дописать и сохранить.
1 edelweiss
 
28.06.06
08:06
СуществуетФайл(<?>)
ExistFile(<?>)
Синтаксис:
СуществуетФайл(<ИмяФайла>)
Назначение:
Проверяет существование файла..
Возвращает: 1 - файл существует; 0 - не существует.
Параметры:
<ИмяФайла> - Строковое выражение с именем файла.
Подробнее см. в документации, глава 'Работа с Файлами'
2 Chum
 
28.06.06
08:06
"работа с файлами" - см. ЖКК файловая система ФС
"работа с Excel" - внимательней ищи. (excel.application)
3 Loko
 
28.06.06
08:06
да это я знаю
а как создать ехель файл
4 edelweiss
 
28.06.06
08:08
Excel.WorkBooks.Add();
5 Chum
 
28.06.06
08:08
(3) а сохрани пустую таблицу
6 edelweiss
 
28.06.06
08:09
(5)иногда лучше молчать
7 Loko
 
28.06.06
08:14
//грубо опишу код
СчСтрок = 1;
Если ФС.СуществуетФайл("defect.xls")=1 Тогда
  ТаблExcel.Application.Workbooks.Open(ИмяКаталога+"defect.xls");  
КонецЕсли;
Book = ТаблExcel.Workbooks.Add();
Ячейка = ТаблExcel.Cells(СчСтрок,1 );
Ячейка.Value="1";
Ячейка = ТаблExcel.Cells(СчСтрок,2 );
Ячейка.Value="2";
Book.SaveAs(ИмяКаталога+"defect.xls");
Book.Close(0);
//когда файла нет, то сохраняет файл ОК. и записывает. а когда есть. то нифига
8 edelweiss
 
28.06.06
08:17
а если сделать так


Если ФС.СуществуетФайл("defect.xls")=1 Тогда
 ТаблExcel.Application.Workbooks.Open(ИмяКаталога+"defect.xls");
else
 ТаблExcel.Workbooks.Add();
КонецЕсли;
Ячейка = ТаблExcel.Cells(СчСтрок,1 );
9 Loko
 
28.06.06
08:21
(8)пробовал, тогда она не запишет файл. т.к. для случая когда файл найден, далее будет ругаться на переменнную book.
10 Loko
 
28.06.06
08:22
(9) тьфу. не сразу догнал код. счас попробую
11 Loko
 
28.06.06
08:23
"Сохранить файл под именем, совпадающим с именем открытого документа, невозможно. Укажите другое имя или закройте другой документ" - в табло.
12 edelweiss
 
28.06.06
08:24
а если головой подумать... или с утра не айда... или вам здесь весь код написать?
13 Loko
 
28.06.06
08:25
утро? хе. у нас полвторого)) да я с утра бьюсь. литературы нет. уровень в 1С средний.
14 edelweiss
 
28.06.06
08:27
на skunk_ dog mail ru отправь свое творение
15 AndrewHV
 
28.06.06
08:28
(14) а почему почта не edelweiss? :)
16 edelweiss
 
28.06.06
08:30
(15)нах... этот ящик специально для спама... зачем мне другие светить
17 smaharbA
 
28.06.06
08:36
ТаблExcel.DisplayAlerts=0
...
ТаблExcel.DisplayAlerts=1
18 smaharbA
 
28.06.06
08:37
Если ФС.СуществуетФайл("defect.xls")=1 Тогда
 Book=ТаблExcel.Application.Workbooks.Open(ИмяКаталога+"defect.xls");
else
 Book=ТаблExcel.Workbooks.Add();
КонецЕсли;
19 edelweiss
 
28.06.06
08:38
(18)он наверное сам победил
20 а лю 427
 
28.06.06
08:41
+(6) или купить курицу и жевать ее мозги...
21 Loko
 
28.06.06
09:32
спасибо Эдельвейсу.
(18)тут правильно. тоже спасибо.
22 Loko
 
28.06.06
09:36
единственное, что когда файл существует и дописывается, то система спрашивает, что, типа: "файл существует, переписать? Да+Нет+Отмена". В конец обнаглею и спрашу: "ЕСть возможность этот вопрос убрать, чтоб дописывал по умолчанию?
23 edelweiss
 
28.06.06
09:37
// Отучим excel задавать глупые вопросы, типа
// "Сохранить изменения". И закроем нашу книгу.
Book.Saved = 1;
Book.Close();
24 FreeFin
 
28.06.06
09:41
(22) Тупо, но спращивать не будет:
//******
CurrentBook=EB.WorkBooks.Add();
Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\ForTP\"+СокрЛП(ИмяФ)+"xls")=1 Тогда
ФС.УдалитьФайл(КаталогИБ()+"ExtForms\ForTP\"+СокрЛП(ИмяФ)+"xls");    
КонецЕсли;
CurrentBook.SaveAs(КаталогИБ()+"ExtForms\ForTP\"+ИмяФ+".xls");
25 edelweiss
 
28.06.06
09:43
(24) см. (20)
26 Loko
 
28.06.06
09:44
(23) спасибо, допер
итого:
Если ФайлЕстьАНеМожетНеЕсть = 1 тогда
  Book.Saved = 1;
  Book.Close();
Иначе
  Book.SaveAs(ИмяКаталога+"defect.xls");
  Book.Close(0);
КонецЕсли;
27 Loko
 
28.06.06
09:45
+(23) переменая ФайлЕсть определяется после "СуществуетФайл"
28 FreeFin
 
28.06.06
09:47
(25) Ты дурачок? Тебе код, работающий автоматом в обработке зрузок из Excel файлов выложен, работающий 2 года, промеж прочим... Иди ф топку.
29 Loko
 
28.06.06
09:49
(28) зачем мне удалять файл? мне дописывать его надо!
30 edelweiss
 
28.06.06
09:50
(28)работающий не значит правильный... а то, что я дурачок... тут все знают... а вам дяденька надо учиться контролировать свои эмоции... особенно когда в вам ваше сало тыкают в мусало
31 FreeFin
 
28.06.06
09:57
(29) А потому и писано в (24), что тупо:
Открываем:
ФС.АтрибутыФайла(FileName,РазмФ,АтрФ,ВремяФ,ВрПД,ВрПЗ,РасшФ);    
Если (СокрЛП(АтрФ)="000010000") Тогда    
CurrentBook=EB.WorkBooks.Open(FileName);
Иначе
Предупреждение("Файл занят!");
EB.Quit();
КонецЕсли;
//Чего-то с ним делаем
//Сохраняем во времянку
EB.DisplayAlerts=0;
CurrentBook.SaveAs(КаталогИБ()+"ExtForms\ForTP\"+ИмяФ+".xls");
//...Закрываем
CurrentBook.Close();
EB.DisplayAlerts=1;
EB.Quit();
// и заменяем на уровне ФС, измененным - тот что был. Фсьо.
32 FreeFin
 
28.06.06
10:03
(30) Хочешь собачиться? Тогда пойми - большие мальчики, разбираются к контексте темы, а не занимаются флудеризмом. Давай, попробуй убить интеллектом, тогда честь и хвала тебе, а так=только запах... А эмоции, это то, что и меня и тебя сдесь держит. Было-бы иначе, и пальцам не пошевелил, чтобы это написать.
33 edelweiss
 
28.06.06
10:07
(32)ваш вопрос в (28) ставит вас в определеную нишу... тягаться с вами интелектом ... куда нам дурачкам... а уж тем более убивать...


вот прям даже ума не приложу как можно совершить убийство используя в качестве орудия преступления интелект...
34 FreeFin
 
28.06.06
10:14
(33) Ладна, как младший по-возрасту, ты-ж с 1899? Уважаю и предлагаю: давай не будем? Не красиво это, хотя и жутко веселит. Если чем оскорбил=сорри, ну не люблю я куриные мозги :-).
35 Shaman100M
 
28.06.06
10:31
(0) Прямое обращение к эксел и внесение изменений  - это тормоза, и если объем большой... Я делал по-другому:

1. Есть файл шаблона эксел *.xlt с необходимой формой отчета / прайсом.
2. Есть текстовый файл с данными
3. В файле-шаблоне прописана связь с текстовым файлом через формулы. Еще нужен макрос, разрывающий эту связь и заменяющий формулы в ячейках на значения.

т.образом, В 1с-ке просто создаем текстовый файл с данными, открываем его в экселе и открываем новый файл эксел на основании шаблона xlt.
2 + 2 = 3.9999999999999999999999999999999...