24.07.07 — 18:26
Борюсь с такой вот фигней:
…
Книга = Новый ComОбъект(«Excel.Application»);
Книга.Application.Workbooks.Open(ИмяФайла);
Лист = Книга.Worksheets(1);
Лист.Range(«A1:A10).NumberFormat = «[$$-409]#,##0.00»; //собсно тут и ругается
…
Сама ошибка — «Ошибка при установке значения атрибута контекста (NumberFormat): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range»
Через поиско я понял, что был далеко не одинок в данной проблеме, не раз находил для себя, вроде бы и новое решение, перебивая модуль, надеясь, что щас вот оно заработает, но проблема не решалась, в итоге вылез на такой вот обнадеживающий топик:
http://forum.foxclub.ru/read.php?28,253200,253200,quote=1
Платформа у меня 8.0.18.2
Знает кто вообще, решаема ли эта проблема, и как?
1 — 24.07.07 — 18:28
2 — 24.07.07 — 18:31
не верю!
Синтаксический контроль конструкция из (0) не пройдет.
Лист.Range(«A1:A10).
Это как?
3 — 24.07.07 — 18:42
уважаемый, я это не из рабочего модуля копировал, а просто набросал для примера, чтобы лишь в общем показать о чем реч. За синтаксис сори, а где именно ошибка, я показал…
4 — 24.07.07 — 18:57
Помню глюк с точкой. Вместо точки в 0.00 попробуй запятую.
5 — 24.07.07 — 19:01
Мда, формат таки записался, спасибо уже прогресс
6 — 24.07.07 — 19:03
(5) Спасибо в карман не положишь
7 — 24.07.07 — 19:05
Странно, хотя через те же макросы выдал точку
8 — 24.07.07 — 19:06
(5) самое прикольное, что на другой машине у тебя может и не записаться…
И это зависит от региональных установок и экселя…
P.S. решение этой проблемы есть…
9 — 24.07.07 — 19:06
(7) Фича известная. И давняя. Помницца Бекас никак не мог решение найти.
10 — 24.07.07 — 19:08
(9) так и не нашел? там же все примитивно делается….
11 — 24.07.07 — 19:11
(0)
вот так работает:
WorkBook=Application.WorkBooks.Open(«Z:test.xls»);
Скрипт=Новый COMОбъект(«MSScriptControl.ScriptControl»);
Скрипт.Language = «javascript»;
List = WorkBook.Worksheets(1);
Скрипт.AddObject(«List»,List);
Скрипт.eval(«List.Range(«»A1:A10″»).NumberFormat = «»[$$-409]#,##0.00″»;»);
WorkBook.save();
Application.Quit();
12 — 24.07.07 — 19:18
(9) Про замену точки на запятую я ему сказал, а дальше разобрался он аль нет я не знаю.
ExcelApplication.International?
13 — 24.07.07 — 19:21
Проблема похоже в том, что NumberFormat из 1C срабатывает как NumberFormatLocal
14 — 24.07.07 — 19:37
(13) возможно. У меня были такие подозрения, но решение нашел раньше…
P.S. причем не оязательно точка-запятая…
(11) пристроенный к телеге паровоз…
15 — 24.07.07 — 19:39
(0)
Книга = Новый ComОбъект(«Excel.Application»);
КакБыКнига=Книга.Application.Workbooks.Open(ИмяФайла);
16 — 24.07.07 — 19:50
Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]#,##0.00»;
17 — 24.07.07 — 19:52
Вернее
Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]# ##0,00»;
18 — 24.07.07 — 19:52
(16) А это тут причем???
19 — 24.07.07 — 19:53
(18) см (17)
20 — 24.07.07 — 19:53
+(18) а референсе на всяк случай, если стиль ссылок не тот, то все — пипец
21 — 24.07.07 — 19:53
(19) У него Range() и так срабатывает.
22 — 24.07.07 — 19:55
NumberFormatLocal ничего не меняет.
23 — 24.07.07 — 19:56
(22) меняет, см (17)
24 — 24.07.07 — 19:58
(23) Смотрю, длина строки выросла на 5 символов. Больше ничего не изменилось
Запятая ошибочная убрана в шаблоне, но сработает точно так-же как и NumberFormat
25 — 24.07.07 — 20:00
NS я тебя конечно уважаю, но счас проверю и напишу, все работает, это уж точно, тема была уже далеко не один разок
26 — 24.07.07 — 20:00
см. (8) и (12,13)
27 — 24.07.07 — 20:01
(25) Угу, и так-же всё работает с NumberFormat
28 — 24.07.07 — 20:12
[1C]
//*******************************************
Процедура Сформировать()
Ексель=СоздатьОбъект(«Excel.Application»);
Ексель.ReferenceStyle=1;
Книги=Ексель.Workbooks;
Книга=Книги.Add();
Листы=Книга.Worksheets;
Лист=Листы.item(1);
Ячейки=Лист.Cells;
Диапазон=Ячейки.Range(«A1:A10»);
Диапазон.NumberFormatLocal = «[$$-409]# ##0,00»;
Сообщить(Ячейки.Range(«A1»).NumberFormat);
Сообщить(Ячейки.Range(«A1»).NumberFormatLocal);
Ячейки.Range(«A1»).Value=10245.23;
Ячейки.Range(«A1»).EntireColumn.AutoFit();
Сообщить(Ячейки.Range(«A1»).Text);
Ексель.Visible=-1;
КонецПроцедуры
[/1C]
29 — 24.07.07 — 20:14
Ну и?
А если теперь попробовать
Диапазон.NumberFormat = «[$$-409]# ##0,00»;
30 — 24.07.07 — 20:15
(27) работает, если формат «локаль» задан, как в (17)
31 — 24.07.07 — 20:15
(29) да
32 — 24.07.07 — 20:16
Да, в смысле они работают одинаково?
33 — 24.07.07 — 20:16
(32) ага ))
34 — 24.07.07 — 20:18
Блин, немного поцарапали машину, повезли ремонтировать по Каско.
Там всё сделали, и сказали (показали) что машина крашенная!!!
Не поверили — нам показали целый цех, где КРАСЯТ НОВЫЕ МАШИНЫ.
Говорят 30% новых машин царапанные/битые.
35 — 24.07.07 — 20:21
(34) жизнь прошла стороной ?
36 — 24.07.07 — 20:22
я тут приору увидал, десятка лучче…
37 — 24.07.07 — 20:23
(35) Собирались её продавать — теперь уйдет чуть дешевле
по идее пустяки, но новость меня ошарашила. Там варят и красят новые иномарки ценой 30, 40, 50 Килобаксов. Люди думая что покупают новую машину в салоне, на самом деле покупают битую машину.
38 — 24.07.07 — 20:25
(36) У нас 15-ая, с модным черным бампером. Оказалось что заводские бамперы только черные. В итоге оказалось что купили в салоне машину с битыми и перекрашенными бамперами, и перекрашена одна задняя дверь. Покупали три года назад — наверно сейчас салону уже претензий не предъявить…
39 — 24.07.07 — 20:25
Опечатался — заводские только серые.
40 — 24.07.07 — 20:27
(34) а ты ВИДЕЛ УСЛОВИЯ ПЕРЕВОЗКИ?
Везли спецзаказом тачку в КОНТЕЙНЕРЕ — так эти уроды буржуи ее даже толком не закрепили, один борт протерся до дыр. Меняли дверь и крыло.
В автовозах — что угодно бывает…
P.S. в контейнере тачку не закрепили толком, но фиксаторы максимальных ускорений — ПОСТАВИЛИ!!! Полные уроды. Хорошо, что ни один не сработал. Так что выставили счет на 35 штук баксов за ремонт, шлифовку и покраску…
41 — 24.07.07 — 20:29
(40) Нет, не видел, но теперь знаю
Покупать новую машину резко расхотелось
Torquader
42 — 25.07.07 — 14:54
Excel — загадочная вещь.
Региональные установки для Excel и для 1C могут быть разные.
Кроме того, всё зависит от версии Excel.
P.S. а зачем такой сложный формат нужен ?
jediAlex 4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 627 |
||||
1 |
||||
15.12.2016, 13:55. Показов 4856. Ответов 3 Метки нет (Все метки)
Здравствуйте. Пытаюсь вывести из табличной части обработки 1с дату в ячейку Excel:
Excel воспринимает дату как текст -NumberFormat не срабатывает. Как вывести дату в формате даты, а не текста?
0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,912 |
||||
15.12.2016, 14:01 |
2 |
|||
0 |
jediAlex 4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 627 |
||||||||
15.12.2016, 14:17 [ТС] |
3 |
|||||||
сделал:
вывалилась ошибка при выполнении:
0 |
Dethmontt Модератор 3724 / 2918 / 575 Регистрация: 10.03.2011 Сообщений: 11,491 Записей в блоге: 1 |
||||
22.12.2016, 13:01 |
4 |
|||
0 |
Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.
Таблицы 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.
Замечание: В 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 — тонкая сплошная. |
Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
This code has been working for ages. I thought maybe I accidently pressed a key but I cannot seem to see it. I suddenly get the error:
Unable to set the NumberFormat property of the Range class
in the below code:
Worksheets("Sheet1").Cells(y + k, x + j).Select
TempValue = Worksheets("Sheet1").Cells(y + k, x + j).Value
Worksheets("Sheet1").Cells(y + k, x + j).NumberFormat = "#,##0" //ERROR HERE
Worksheets("Sheet1").Cells(y + k, x + j).Value = TempValue
asked May 29, 2012 at 14:50
intrigued_66intrigued_66
15.8k51 gold badges118 silver badges187 bronze badges
8
The problem as discovered in Chat was the workbook had more than 64,000 formats because of which the user was getting the «Too many different cell formats» error message in Excel
Solution
Topic: You receive a «Too many different cell formats» error message in Excel
Link: http://support.microsoft.com/kb/213904
QUOTE from the above link
In Microsoft Excel 2007/2010 files may produce the following error message;
Excel found unreadable content in the file
This problem occurs when the workbook contains more than approximately 4,000 different combinations of cell formats in Excel 2003 or 64,000 in Excel 2007 and higher.
Solution as mentioned in the link is to download and run the XLStyesTool
answered May 29, 2012 at 15:35
Siddharth RoutSiddharth Rout
147k17 gold badges206 silver badges250 bronze badges
0
I met with this problem using Fuzzy LookUp AddIn in Office365ProPlus.
After I run FuzzyLookUp only 10 rows of output were generated and this message popped up.
Problem was caused by my local setting of Excell.
To fix it I had to change decimal separator from coma into dot under general Excel settings.
On my side it solved the problem perfectly.
answered Nov 7, 2019 at 14:15