Имя: Пароль:
1C
 
ошибка при сохранении в Excel
0 warhero
 
19.06.07
13:12
Юзаю следующую конструкцию :
 Excel.Workbooks().SaveAs(ИмяФайла,-4143)...но на разных компьютерах работает по-разному - где-то вылетает, где-то отрабатывает отлично...Excel один и тот же - из Офиса 2003, релиз 1С-ны тоже - за нумером 25...права на сохранение в папку тоже одинаковы...в чем дело, может кто сталкивался ?

Заранее спасибо !
1 smaharbA
 
19.06.07
13:27

Книги=Ексель.Workbooks;
Книга=Книги.Open(Файл);
//Книга=Книги.Add();
Книга.SaveAs(ИмяФайла,-4143);

Пишите правильно
2 warhero
 
19.06.07
13:30
хммм...а что именно у меня неправильно ? Я ж говорю, сия конструкция работает на одном компьютере, и не работает на другом...значит, дело не в синтаксисе...а в чем, вот вопрос !
3 warhero
 
19.06.07
13:36
up
4 smaharbA
 
19.06.07
13:37
(2) ты че такой упрямый ?
у тебя просто открыта одна книга, вот и сохраняет, 2 книги или шаблон+книга уже вывалится
Не хочешь не верь, но тута я самый умный по этим вопросам ))
5 smaharbA
 
19.06.07
13:38
хотя я передумал, в (0) вообще неверно
6 smaharbA
 
19.06.07
13:39
+
Ексель.DisplayAlerts=0;
...
Ексель.DisplayAlerts=-1;
7 Heckfy
 
19.06.07
13:40
(6) Давай уже и я отмечусь :)

1С и Excel.

I. Вступление
II. Таблицы 1С и Excel.
III. Получение данных из Excel.
IV. Вывод данных в Excel.
V. Часто используемые методы для чтения/установки значений в Excel.

Вступление.

Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.

Таблицы 1С и Excel.

Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.

На сайте 1С (http://www.1c.ru/) есть полезная программка, которая дает возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу 1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет необходимости.

Полная информация о программе находится здесь.
Скачать программу можно здесь (архив zip 682 739 байт).

Замечание: В Excel разделителем дробной части считается символ ",". Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например ".") на ",". Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С "15.2" отобразится в Excel как "15.фев".

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
позволит нам получить доступ через переменную "Эксель" к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.

Открытие книги (файла):
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
ПутьКФайлу - полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:
Лист = Книга.WorkSheets(НомерЛиста);
или
Лист = Книга.WorkSheets(ИмяЛиста);
НомерЛиста - номер листа в книге, ИмяЛиста - имя листа в книге.

Получение значения ячейки листа:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Add();


Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:
Лист = Книга.WorkSheets(НомерЛиста);
либо добавить в книгу новый лист, если необходимо:
Лист = Книга.Sheets.Add();
Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
Возврат;
КонецПопытки;
ПутьКФайлу - полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов \ / : * ? " > < |.

Часто используемые методы для чтения/установки значений в Excel.

Эксель = СоздатьОбъект("Excel.Application");  Получение доступа к приложению Excel.
Эксель.Visible = Видимость;  0 - Excel не виден, 1 - виден.
Книга = Эксель.WorkBooks.Add();  Создание новой книги (файла) Excel.
Книга.SaveAs(ИмяФайла);  Сохранение книги Excel.
Лист = Книга.WorkSheets.Add();  Добавление нового листа в книгу.
Книга = Эксель.WorkBooks.Open(ИмяФайла);  Открытие существующей книги (файла) Excel.
Лист = Книга.WorkSheets(НомерЛиста);  Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name = ИмяЛиста;  Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom = Масштаб;  Задание параметра страницы "Масштаб" (от 10 до 400).
Лист.PageSetup.Orientation = Ориентация;  Ориентация: 1 - книжная, 2 - альбомная.
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);  Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры);  Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры);  Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры);  Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth = Ширина;  Задание ширины колонке.
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;  Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта;  Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта;  Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный;  1 - жирный шрифт, 0 - нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив;  1 - наклонный шрифт, 0 - нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый;  2 - подчеркнутый, 1 - нет.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат;  Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии;  Установка рамок ячейки. 1 - тонкая сплошная.
8 warhero
 
19.06.07
15:31
Я перезакрывал весь Excel на конкретном компутере (там, где не работает метод SaveAs), даже перегружал его...таким образом, оставил одну книгу Excel (лургих не открывал)...но все так, как и было...
9 Папа Гапа
 
19.06.07
15:36
(8) Перезакрывание всего Екселя не поможет. Код меняй. Тебе же Гуру smaharbA
объяснил...
10 warhero
 
19.06.07
15:39
Да я уяснил уже это...я одного не могу понять - почему на одном работает компьютере, а на другом - нет ?! Везде закрыт Excel, то бишь нет нигде ни одной открытой рабочей книги...
11 warhero
 
19.06.07
15:43
Он сказал - при более чем одной открытой рабочей книге Excel возникает ошибка ! На одной машине все, что можно закрыто - все работает ! На другой - те же условия - ниффига не работает !
12 AcaGost
 
19.06.07
15:47
(10) А как создаешь файл Excel?
13 warhero
 
19.06.07
15:51
ОкноЕхс=СоздатьОбъект("Excel.Application");
 НовыеРабочиеКниги=ОкноЕхс.Workbooks;
 РабочаяКнига=ОкноЕхс.Workbooks.Open(ИмяФФ);
     
 ОкноЕхс.DisplayAlerts=0;
 ОкноЕхс.Workbooks(ВыбФ).SaveAs(ИмяФФ,-4143);
 ОкноЕхс.DisplayAlerts=1;

 вываливается на SaveAs...но не везде...
14 warhero
 
19.06.07
15:54
это не моя разработка...я готовую юзаю чью-то для перевода mxl в xls...все работало всегда как часы...а вот на одном из компьютеров у юзера такая вот проблема...у меня все нормально...не пойму, в чем дело...
15 warhero
 
19.06.07
15:59
кстати, а у меня работает и с еще одной открытой рабочей книгой...загадка...
16 AcaGost
 
19.06.07
16:01
(14) Закрой вначале "РабочаяКнига"
17 smaharbA
 
19.06.07
19:40
ОкноЕхс=СоздатьОбъект("Excel.Application");
 НовыеРабочиеКниги=ОкноЕхс.Workbooks;
 РабочаяКнига=ОкноЕхс.Workbooks.Open(ИмяФФ);
     
 ОкноЕхс.DisplayAlerts=0;
 РабочаяКнига.SaveAs(ИмяФФ,-4143);
 ОкноЕхс.DisplayAlerts=1;
18 smaharbA
 
19.06.07
19:41
Даже лучче так

ОкноЕхс=СоздатьОбъект("Excel.Application");
 НовыеРабочиеКниги=ОкноЕхс.Workbooks;
 РабочаяКнига=НовыеРабочиеКниги.Open(ИмяФФ);
     
 ОкноЕхс.DisplayAlerts=0;
 РабочаяКнига.SaveAs(ИмяФФ,-4143);
 ОкноЕхс.DisplayAlerts=1;
19 warhero
 
20.06.07
10:34
Попробую...но все же, почему при равных условиях отрабатывает по-разному ?