Ошибка чтения ТабДок.Прочитать() |
Я |
09.11.20 — 14:03
При открытии файла XLS через ТабДок.Прочитать()
Ошибка при выполнении файловой операции . Формат файла не поддерживается.
Если исходный файл открыть в Excel и сохранить, ошибки нет.
Мне надо читать его программно. Кто-нибудь решал эту проблемку?
1 — 09.11.20 — 14:05
(0) попробуй переименовать в *.xlsx, экселю пофигу а 1С такую ошибку выдает если формат не соответствует расширению
2 — 09.11.20 — 14:18
(0) сколько листов в файле? примечания есть?
3 — 09.11.20 — 14:20
(2) Лист один. Примечаний нет
(1) Расширение *.xls . В свойствах тип файла Лист Microsoft Excel 97–2003 (.xls)
4 — 09.11.20 — 14:24
(3) у xls и xlsx внутренняя структура. Если файл с новым форматом сохранить с расширением xls, то эксель его откроет, а не 1С нет. Просто попробуй, нет — будешь искать варианты дальше
5 — 09.11.20 — 14:31
Откуда файл взялся? С интернета каким-нибудь пых-скриптом создан?
Такое в таких случаях бывает, это же опенсорц, там делают на ХХП…
6 — 09.11.20 — 14:34
В 8.3.17.1549 пофиксили
7 — 09.11.20 — 14:42
(5) Файл прислан по почте. Создается регламентом у контрагентов. Как-не знаю. Скорее всего ХХП
(6) 1С:Предприятие 8.3 (8.3.18.1128)
(4) Попробую.
8 — 09.11.20 — 14:45
(0) Через ком-объект прочитай.
9 — 09.11.20 — 14:52
(8) Этот вариант я оттягиваю до последнего )
10 — 09.11.20 — 15:04
(4) Переименование с другим расширением даёт тот же результат:»Формат не поддерживается»
11 — 09.11.20 — 15:06
Это формат Excel 95, неподдерживается.
12 — 09.11.20 — 15:06
(10) А файл то открывал, может там вообще csv внутри
13 — 09.11.20 — 15:07
(10) выложи файл, если не секретный
14 — 09.11.20 — 15:11
(12) Экселем файл открывается без проблем. Сохраняю его без каких либо изменений. После этого он открывается из 1С без ошибок.
15 — 09.11.20 — 15:12
(14) открой блокнотом
16 — 09.11.20 — 15:15
17 — 09.11.20 — 15:16
(15) В блокноте с кракозябрами
18 — 09.11.20 — 15:16
была недавно эта проблема, файл формировали какой то приблудой, в свойствах файла должно быть название, какой то там xl
19 — 09.11.20 — 15:16
(18) Как решили эту проблему?
20 — 09.11.20 — 15:18
тему поднимал «малоопытный» человек, наверно никак, но было ясно, что при формировании получаем файл не совсем той структуры, которая получается из самого экселя, типа как какого то оглавления не хватает или еще чего то подобного
21 — 09.11.20 — 15:22
22 — 09.11.20 — 15:23
проблема не совсем такая, но причина может быть аналогичная. Excelize во.
23 — 09.11.20 — 15:26
(16) Да, внутри похож на xls… похоже без экселя 1С его не съест.
(21) С таким тоже сталкивался, победить не смог.
24 — 09.11.20 — 15:28
(23) велосипед наверно только, как xml может или еще что
ну факт в том, что штатный механизм в таком случае не работает
25 — 09.11.20 — 15:34
эмммм… звиняйте за «малоопытного»)
ras27
26 — 09.11.20 — 15:40
(24) Так старый формат (xls) вроде не xml внутри и закрыт. И парсить xml это та ещё задача, ТС как раз ищет лёгких путей))). Здравой выглядит идея пересохранять файл экселем или сервисом каким, а потом читать штатно табличным документом
27 — 09.11.20 — 15:45
(26) кстати о сервисах) можно дать сервис поставщику файла и пусть льет напрямую
МимохожийОднако
28 — 13.11.20 — 07:56
Повторное сохранение файла через открытие файла в Excel позволяет привести его формат к виду, который читается из 1С.
Может быть, подскажете командную строку или набор команд, который делает это без участия пользователя?
Тогда можно будет запустить обработку, которая читает файл с некорректным для 1С форматом и сохраняет обратно в хранилище.
У меня эти файлы лежат до времени в хранилище значений в регистре сведений.
Автор magnifico61, 30 мая 2018, 22:18
0 Пользователей и 1 гость просматривают эту тему.
ФайлНовый = ПолучитьИмяВременногоФайла("xlsx");
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.WorkBooks.Open(Объект.Файл);
Книга.SaveAs(ФайлНовый);
Excel.Quit();
Excel = Неопределено;
Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?
Цитата: magnifico61 от 30 мая 2018, 22:18
Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?
Сохранить сначала в xls-формате, открыть файл в Excel, поддерживающем xlsx и сохранить его в нужном.
Что за конфигурация у Вас, почему возникла потребность в программировании?
УТ 11. Excel поддерживает xlsx.
Руками каждый раз пересохранять файл нет возможности, так как постоянно грузится большое количество данных с разных файлов Excel.
Это необходимо чтобы облегчить работу пользователю.
А сама УТ 11 не поддерживает выгрузку в xlsx-формате?
А если .xlsx выгруженного файла изменить на .xls, открываться будет?
Excel новых версий поддерживает оба формата, так зачем эти «городушки»?
На какой платформе работаете?
в xls не пробовал сохранить.
платформа 8.3.10.2580
Пользовался таким, чтобы пересохранить наоборот, xlsx в xls. Остальные варианты не пробовал но, думаю, всё будет работать.
Функция ПересохранитьЭксельФайл(ПутьКФайлу,ПутьНового=Неопределено,пФорматФайла=51)
Попытка
ExcelЗапущен = Ложь;
//Проверка на существование файла
мФайл = Новый Файл(ПутьКФайлу);
Если НЕ мФайл.Существует() Тогда
ТекстИскл = "[Файл: " + ПутьКФайлу + " не найден.]";
ВызватьИсключение ТекстИскл;
КонецЕсли;
СоответствиеРасширений = Новый Соответствие;
СоответствиеРасширений.Вставить(45, ".mht");
СоответствиеРасширений.Вставить(46, ".xml");
СоответствиеРасширений.Вставить(23, ".csv");
СоответствиеРасширений.Вставить(9, ".dif");
СоответствиеРасширений.Вставить(8, ".dbf");
//работает только в 2007
СоответствиеРасширений.Вставить(51, ".xlsx");
СоответствиеРасширений.Вставить(47, ".xml");
СоответствиеРасширений.Вставить(57, ".pdf");
СоответствиеРасширений.Вставить(60, ".ods");
//
СоответствиеВерсий = Новый Соответствие;
СоответствиеВерсий.Вставить(45, "11.0");
СоответствиеВерсий.Вставить(46, "11.0");
СоответствиеВерсий.Вставить(23, "11.0");
СоответствиеВерсий.Вставить(9, "11.0");
СоответствиеВерсий.Вставить(8, "11.0");
//работает только в 2007
СоответствиеВерсий.Вставить(51, "12.0");
СоответствиеВерсий.Вставить(47, "12.0");
СоответствиеВерсий.Вставить(57, "12.0");
СоответствиеВерсий.Вставить(60, "12.0");
//
Расширение = СоответствиеРасширений.Получить(пФорматФайла);
Если Расширение=Неопределено Тогда
ВызватьИсключение "[Неверно указан параметр ""Формат файла"".]";
КонецЕсли;
Если ПутьНового=Неопределено Тогда
ПутьНового=ПолучитьИмяВременногоФайла(Расширение);
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
ExcelЗапущен = Истина;
Исключение
ВызватьИсключение "[Не удалось запустить Excel.]" + Символы.ПС + ОписаниеОшибки();
КонецПопытки;
//проверка возможности сохранения в выбранный формат
Если Excel.Version < СоответствиеВерсий.Получить(пФорматФайла) Тогда
ВызватьИсключение "[В текущей версии Excel выбранный формат файла ("+Расширение+") не поддерживается.]";
КонецЕсли;
Excel.Visible = Ложь;
Excel.DisplayAlerts = Ложь;
КнигаExcel = Excel.WorkBooks.Open(ПутьКФайлу);
КнигаExcel.SaveAs(ПутьНового, пФорматФайла);
КнигаExcel.Close();
Excel.DisplayAlerts = Истина;
Excel.Quit();
Excel = Неопределено;
Возврат ПутьНового;
Исключение
Если ExcelЗапущен Тогда
Excel.Quit();
КонецЕсли;
КнигаExcel = Неопределено;
Excel = Неопределено;
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
КонецФункции
Если Число(Excel.version) < 12 Тогда
// Excel это ComОбъект(«Excel.application»)
FileFormatNum = -4143// ага, загадочное число
Иначе
FileFormatNum = 56// ну что мешало сделать форматы стандартными?
КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);
отсюда:
https://www.mista.ru/topic.php?id=637830
Банальные мелочи при сохранении в Excel. Боян, но мож кому надо.
При составлении из 1С сложных многостраничных книг в Excel наткнулся на нижеприведенные проблемы, и тк решил их, выкладываю тут. Может кому пригодится )
Если админы посчитают ненужным — сносите смело.
1. «Кривая» расцветка. Цвета абсолютно не те какие закладывались изначально.
Проблема возникает при сборке различных страниц Excel выгруженных из 1С в одну книгу. Тк сборка обычно происходит на основе существующей либо новой книги Excel то палитра книги отличается от палитры сохраняемых из 1С листов. Решение — стандартизировать палитру, подгоняя ее под палитру используемую 1С. Если сборка идет на основе некого шаблона, то надо предварительно на этапе его разработки скопировать туда палитру из «1Сного» листа Excel. Если сборка идет в пустой файл — то просто скопировать палитру (благо это очень просто).
БольшойОтчет.Colors = СтраницаИз1С.Colors;
2. Стандартная сетка Excel зачастую раздражает и мешается. Лучше ее отключать. Например так.
БольшойОтчет.Application.Activewindow.DisplayGridLines = 0;
3. По умолчанию желательно открывать некий определенный лист книги. Делаем:
БольшойОтчет.WorkSheets(Х).Activate(); // где Х — номер листа
4. Вечно один из пользователей отчетов не имеет 2007 хотя бы Excel. Логично что приходится сохранять в xls а не xlsx. Это легко иделать из 1С, а вот используя хз какую версию Excel на компьютере пользователя (которую переодически меняют админы по своему усмотрению) сложнее (тк он для новых книг сам выбирает формат по умолчанию). Приходится анализировать версию:
Если Число(Excel.version) < 12 Тогда
// Excel это ComОбъект(«Excel.application»)
FileFormatNum = -4143 // ага, загадочное число
Иначе
FileFormatNum = 56 // ну что мешало сделать форматы стандартными?
КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);
Собственно все. Удачи.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают
Цитата: wise от 31 мая 2018, 13:19
Иначе
FileFormatNum = 56
lol , в моей функции как раз формат «56», т.е. xls отсутствует. Видимо я именно в xlsx и сохранял, а про xls забыл. Спасибо за подсказку.
Т.е. нужно добавить в мою функцию
СоответствиеРасширений.Вставить(56, ".xls");
СоответствиеВерсий.Вставить(56, "11.0");
Дорабатывал обработку загрузки прихода из Excel. Обработка изначально была не моя, все хорошо работало, но внезапно клиент в облаке переехал с файловой базы на SQL, потому что файловая тормозила.
И тут 1С начала писать, что файл не обнаружен. Оказывается, код загрузки из Excel был написан только под толстого клиента. Пришлось дорабатывать стандартным образом:
//На клиенте
ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);//На сервере
ПолноеИмяФайла = ПолучитьИмяВременногоФайла(«XLS»);
ДД.Записать(ПолноеИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
Доработал и забыл. Как вдруг новая напасть — попросили доработать обработку, начинаю ее отлаживать, а она не считывает данные из XLSX файла.
Причем выдает ошибку доступа к временному файлу:
Я попробовал записывать во временный каталог, но это не принесло результата:
ТекКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ТекКаталог);
ПолноеИмяФайла = ТекКаталог + «» + Новый УникальныйИдентификатор() + ТипФайла; //ПолучитьИмяВременногоФайла(«XLS»);ДД.Записать(ПолноеИмяФайла);Ф = Новый Файл(ПолноеИмяФайла);
Сообщить(ПолноеИмяФайла + » Существует: » + Ф.Существует());ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст); //, ТипФайлаТабличногоДокумента.ODS);
Причем 1С писала, что файл существует:
Тогда почему же она не может его считать? Задачу нужно было решить срочно, причем прикладную логику я уже сделал, а споткнулся на мелочи. Я уже было хотел перейти на локальный компьютер для разработки (тем более что на сервере из соображений быстродействия отключена отладка). Но тут мне пришла мысль впервые попробовать использовать не временные файлы, а потоки:
ПотокДанных = Новый ПотокВПамяти();
ЗаписьДД = Новый ЗаписьДанных(ПотокДанных);
ЗаписьДД.Записать(ДД);
ЗаписьДД.Закрыть();
ПотокДанных.Перейти(0, ПозицияВПотоке.Начало);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПотокДанных, СпособЧтенияЗначенийТабличногоДокумента.Текст, ТипФайлаТабличногоДокумента.ODS);
ПотокДанных.Закрыть();
Увы, при этом выдавалась все та же ошибка доступа. Кроме того, в документации я посмотрел, что из памяти можно считывать не все форматы, а только MXL и ODS. Бред, конечно, но такова 1С.
И тут до меня дошло попробовать поменять расширение на XLSX:
//на клиенте
ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
Ф = Новый Файл(ПолноеИмяФайла);
ТипФайла = Ф.Расширение);//на сервере
ТекКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ТекКаталог);
ПолноеИмяФайла = ТекКаталог + «» + Новый УникальныйИдентификатор() + ТипФайла;
ДД.Записать(ПолноеИмяФайла);ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
И всё заработало. У 1С, как обычно, беда с диагностикой ошибок. Она пишет совсем не ту ошибку, которая вызывает проблему. Доступ к файлу есть, просто формат файла 1С определяет по расширению, а не содержимому файла.
Время факт: 0,5 час. На поиски решения проблемы.
Трудности загрузки/выгрузки эксельных прайсов.
Одним из полезных нововведений на платформе 8.3.6 стала возможность возможность импорта содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в табличный документ.
На платформе 8.3.10 появилась возможность считывания данных с отдельных листов книги EXCEL.
Данная возможность доступна как в интерактивном режиме, так и из встроенного языка.
Реализована поддержка вставки из буфера обмена областей, скопированных из Microsoft Excel и OpenOffice Calc.
Реализация импорта из EXCEL на встроенном языке стала возможна в результате нововведений в функционал объекта «ТабличныйДокумент»:
Для метода «Прочитать» объекта «ТабличныйДокумент» реализован параметр «СпособЧтенияЗначений» (Новое системное перечисление «СпособЧтенияЗначенийТабличногоДокумента»). (с) Загрузка из EXCEL
<СпособЧтенияЗначений> (необязательный)
Тип: СпособЧтенияЗначенийТабличногоДокумента.
Определяет, каким образом нужно интерпретировать значения, считываемые из исходного документа XLS, XLSX или ODS.
При загрузке табличного документа из формата Excel 97 — 2010 и OpenOffice Calc, в случае если в ячейке исходного документа содержалось значение типа Дата или Число, то в ячейку результирующего табличного документа это значение попадает в зависимости от значения этого параметра.
Значение по умолчанию: Текст.
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(тз);
Построитель.Выполнить();
Построитель.Вывести();
Так вот. И в excel и в mxl ячейка может содержать значение и иметь формат представления. Проблема в том, что СКД при выводе значений в табличный документ выводит только представление…
Проблема при сохранении табличного документа в файл xlsx
Если в ячейке будет код номенклатуры с лидирующими нулями — при экспорте в эксель значение ячейки их обрежет,
например было «00246100» стало «246100»:
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Область(1,1).Текст = "Номенклатура";
ТабДокумент.Область(1,2).Текст = "Артикул";
ТабДокумент.Область(2,1).Текст = "NSIN0001130294";
ТабДокумент.Область(2,2).Текст = "00246100";
ИмяФайлаXLSX = ПолучитьИмяВременногоФайла("xlsx");
ТабДокумент.Записать(ИмяФайлаXLSX, ТипФайлаТабличногоДокумента.XLSX);
ЗапуститьПриложение(ИмяФайлаXLSX);
Выведет:
При этом в представлении всё верно…
И да, если переименовать xlsx в zip и открыть архиватором sheet1.xml — то там будет именно «246100».
Конечно, есть ещё вариант ручной установки значения ячейки таб. документа, и он работает.
На клиенте…
#Если ТолстыйКлиентОбычноеПриложение Тогда
// В экселе значение ячейки отличается от представления (обрезает лидирующие нули и т.п.)
Область = ТабДок.Область(1,1,ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
Область.Защита = Ложь;
Область.СодержитЗначение = Истина;
#КонецЕсли
Но #НаСервере установка свойства СодержитЗначение приводит к очистке. И в справке про это ничего нет…
Для регламентных не годится.
Проблема при загрузке табличного документа из файла xlsx
При загрузке файла экселя, сформированного в других языках программирования, содержимое может вообще не прочитаться (если верить гуглу при поиске заголовков этого файла выдаёт Open XML SDK 2.5),
например:
ИмяФайлаXLSX = ПолучитьИмяВременногоФайла("xlsx");
Ссылка = "https://raw.githubusercontent.com/kuzyara/ConvertCSV/master/priceberg.xlsx";
КопироватьФайл(Ссылка, ИмяФайлаXLSX);
//ЗапуститьПриложение(ИмяФайлаXLSX);
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ИмяФайлаXLSX, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ЗаполненоЯчеек = 0;
Для НомерСтроки = 1 По ТабДокумент.ВысотаТаблицы Цикл
Для НомерСтолбца = 1 По ТабДокумент.ШиринаТаблицы Цикл
ТекЗначение = ТабДокумент.Область(НомерСтроки,НомерСтолбца).Текст;
Если НЕ ПустаяСтрока(ТекЗначение) Тогда
ЗаполненоЯчеек = ЗаполненоЯчеек + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить("Заполнено ячеек: " + ЗаполненоЯчеек);
// Выведет:
//
// Заполнено ячеек: 0
В режиме предприятия (меню Файл — Открыть) это пустой таб. документ
с 1026 столбца…
Хотя в экселе файл открывается прекрасно:
Ньюансы (различия) чтения методом OLE и ТабДок
//COM
Excel = Новый COMОбъект("Excel.Application");
Excel.Visible=0;
Excel.FileValidation = 1;
Excel.Workbooks.Open(ИмяФайла, , Истина);
Book = Excel.Workbooks(1);
Sheet = Book.Sheets(1);
МассивМассивовXLS = Sheet.UsedRange.Value.Выгрузить();
//ТАБ
ТабДокумент= Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ИмяФайлаXLSX);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДокумент.Область());
ПостроительОтчета.Выполнить();
// Результат выгружаем в таблицу значений.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Часть кода для сравнения этих методов:
ИначеЕсли СтрНайти(Стр, ",") > 0 Тогда
//СтрокаCOM[КиЗ.Ключ] "0,00002" Строка
//СтрокаТАБ[КиЗ.Значение] "0,000020" Строка
// ...
ДобавитьНьюанс(Ньюансы, "Ньюанс1", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);
ИначеЕсли ТолькоЦифрыВСтроке(Стр) Тогда
//СтрокаCOM[КиЗ.Ключ] "58198119" Строка
//СтрокаТАБ[КиЗ.Значение] "058198119" Строка
// ...
ДобавитьНьюанс(Ньюансы, "Ньюанс2", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);
ИначеЕсли КиЗ.Значение = "Колонка4" И СтрНайти(Стр, ".") > 0 Тогда
//СтрокаCOM[КиЗ.Ключ] "835,2" Строка
//СтрокаТАБ[КиЗ.Значение] "835.2000000000001" Строка
// ...
ДобавитьНьюанс(Ньюансы, "Ньюанс3", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);
ИначеЕсли СодержимоеПервых100СтрокПусто(ТабДокумент) Тогда
// если платформа не смогла прочитать и выдала пустые строки
// ...
ДобавитьНьюанс(Ньюансы, "Ньюанс4", "Пустые строки: NativeXLSX", "", Истина);
ИначеЕсли СокрЛП(СтрокаОбразец[КиЗ.Ключ]) = СокрЛП(Стр) Тогда
//СтрокаCOM[КиЗ.Ключ] "уп.10" Строка
//СтрокаТАБ[КиЗ.Значение] "уп.10 " Строка
// ...
ДобавитьНьюанс(Ньюансы, "Ньюанс5", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);
ИначеЕсли ТабДокумент.ШиринаТаблицы > 1024 Тогда
ДобавитьНьюанс(Ньюансы, "Ньюанс6", "ШиринаТаблицы > 1024", "");
// и т.д.
Я конечно буду рад ошибаться, но, по-моему, нативные средства платформы по работе с Excel совсем далекоооооо не всегда применимы на практике.
Ошибка чтения ТабДок.Прочитать() |
Я |
МимохожийОднако
09.11.20 — 14:03
При открытии файла XLS через ТабДок.Прочитать()
Ошибка при выполнении файловой операции . Формат файла не поддерживается.
Если исходный файл открыть в Excel и сохранить, ошибки нет.
Мне надо читать его программно. Кто-нибудь решал эту проблемку?
RomanYS
1 — 09.11.20 — 14:05
(0) попробуй переименовать в *.xlsx, экселю пофигу а 1С такую ошибку выдает если формат не соответствует расширению
alkorolev
2 — 09.11.20 — 14:18
(0) сколько листов в файле? примечания есть?
МимохожийОднако
3 — 09.11.20 — 14:20
(2) Лист один. Примечаний нет
(1) Расширение *.xls . В свойствах тип файла Лист Microsoft Excel 97–2003 (.xls)
RomanYS
4 — 09.11.20 — 14:24
(3) у xls и xlsx внутренняя структура. Если файл с новым форматом сохранить с расширением xls, то эксель его откроет, а не 1С нет. Просто попробуй, нет — будешь искать варианты дальше
ДенисЧ
5 — 09.11.20 — 14:31
Откуда файл взялся? С интернета каким-нибудь пых-скриптом создан?
Такое в таких случаях бывает, это же опенсорц, там делают на ХХП…
yzimin
6 — 09.11.20 — 14:34
В 8.3.17.1549 пофиксили
МимохожийОднако
7 — 09.11.20 — 14:42
(5) Файл прислан по почте. Создается регламентом у контрагентов. Как-не знаю. Скорее всего ХХП
(6) 1С:Предприятие 8.3 (8.3.18.1128)
(4) Попробую.
vicof
8 — 09.11.20 — 14:45
(0) Через ком-объект прочитай.
МимохожийОднако
9 — 09.11.20 — 14:52
(8) Этот вариант я оттягиваю до последнего )
МимохожийОднако
10 — 09.11.20 — 15:04
(4) Переименование с другим расширением даёт тот же результат:»Формат не поддерживается»
mszsuz
11 — 09.11.20 — 15:06
Это формат Excel 95, неподдерживается.
RomanYS
12 — 09.11.20 — 15:06
(10) А файл то открывал, может там вообще csv внутри
RomanYS
13 — 09.11.20 — 15:07
(10) выложи файл, если не секретный
МимохожийОднако
14 — 09.11.20 — 15:11
(12) Экселем файл открывается без проблем. Сохраняю его без каких либо изменений. После этого он открывается из 1С без ошибок.
RomanYS
15 — 09.11.20 — 15:12
(14) открой блокнотом
МимохожийОднако
16 — 09.11.20 — 15:15
МимохожийОднако
17 — 09.11.20 — 15:16
(15) В блокноте с кракозябрами
УдавВПопугаях
18 — 09.11.20 — 15:16
была недавно эта проблема, файл формировали какой то приблудой, в свойствах файла должно быть название, какой то там xl
МимохожийОднако
19 — 09.11.20 — 15:16
(18) Как решили эту проблему?
УдавВПопугаях
20 — 09.11.20 — 15:18
тему поднимал «малоопытный» человек, наверно никак, но было ясно, что при формировании получаем файл не совсем той структуры, которая получается из самого экселя, типа как какого то оглавления не хватает или еще чего то подобного
УдавВПопугаях
21 — 09.11.20 — 15:22
УдавВПопугаях
22 — 09.11.20 — 15:23
проблема не совсем такая, но причина может быть аналогичная. Excelize во.
RomanYS
23 — 09.11.20 — 15:26
(16) Да, внутри похож на xls… похоже без экселя 1С его не съест.
(21) С таким тоже сталкивался, победить не смог.
УдавВПопугаях
24 — 09.11.20 — 15:28
(23) велосипед наверно только, как xml может или еще что
ну факт в том, что штатный механизм в таком случае не работает
УдавВПопугаях
25 — 09.11.20 — 15:34
эмммм… звиняйте за «малоопытного»)
ras27
RomanYS
26 — 09.11.20 — 15:40
(24) Так старый формат (xls) вроде не xml внутри и закрыт. И парсить xml это та ещё задача, ТС как раз ищет лёгких путей))). Здравой выглядит идея пересохранять файл экселем или сервисом каким, а потом читать штатно табличным документом
УдавВПопугаях
27 — 09.11.20 — 15:45
(26) кстати о сервисах) можно дать сервис поставщику файла и пусть льет напрямую
МимохожийОднако
28 — 13.11.20 — 07:56
Повторное сохранение файла через открытие файла в Excel позволяет привести его формат к виду, который читается из 1С.
Может быть, подскажете командную строку или набор команд, который делает это без участия пользователя?
Тогда можно будет запустить обработку, которая читает файл с некорректным для 1С форматом и сохраняет обратно в хранилище.
У меня эти файлы лежат до времени в хранилище значений в регистре сведений.
Ошибка при вызове метода контекста (Прочитать)
Ошибка при выполнении файловой операции при чтении xls файла методом прочитать объекта ТабличныйДокумент.
Скрин сообщения
Данный объект 1C умеет не только записывать в Excel, но возможна и обратная операция с ограничениями, свойственными табличному документу.
В чем плюсы такой методики чтения
- Всё производится встроенными средствами;
- достаточно быстро;
- код в 2 строки
- данные не требуется преобразовывать, обычно всё считывается достаточно корректно, их можно проверить средствами 1С.
- возможно считывать значения ячеек как текст (без авто-преобразования),
- доступно на сервере, где excel вообще нельзя установить (linux, OSx).
Причина ошибки
Отличительной особенностью, вызывающей данную ошибку, является то, что 1С нужен монопольный доступ на время считывания.
Если же документ открыт, то выходит ошибка при выполнении файловой операции чтения.
COM-Объекта Excel.Application в данном ситуации просто открывает еще один экземпляр, а также в нём можно скрыть отображение сообшения о режиме «чтения».
Другой причиной может быть: отсутствие прав на чтение этого файла
Решение:
Закрыть открытую в Excel (или другой программе) книгу, проверить права на файл (возможность открытия в его в Excel, косвенный признак его наличия)
Реклама — средство заставить людей нуждаться в том, о чем они раньше не слыхали.
Содержание:
1. Об ошибке при выполнении файловой операции
2. Устранение «Ошибки при выполнении файловой операции» в 1С 8.3
1. Об ошибке при выполнении файловой операции
Приветствую, коллеги! В данной статье будет описана ошибка «Ошибка при выполнении файловой операции», и подробно рассмотрены способы ее устранения.
Когда происходит обновление конфигураций в 1С 8, по завершении обновления, часто появляется ошибка, которая гласит «Ошибка при выполнении файловой операции – файл не содержит доступных обновлений».
2. Устранение «Ошибки при выполнении файловой операции» в 1С 8.3
Рассмотрим методы, при помощи которых, можно устранить ошибку при выполнении файловой операции в 1С.
Итак, первый способ – это попробовать сделать обновление при помощи файлов по обновлению вида «релиз 1с*.cfu». Если это не помогло, то можно попробовать обновить систему при помощи общего файла вида «полный релиз 1С*.cf».
Вторым способом будет проверка на соответствие общей версии системы 1С с минимальными требованиями версии конфигурации 1С, которую обновляем.
Третий способ устранения ошибки при выполнении файловой операции в 1С – более сложный, но действенный. Необходимо открыть в конфигурацию от поставщика в режиме Конфигуратора. Если ошибка всё так же появляется, то необходимо удалить конфигурацию поставщика, а затем опять установить. По сути, в данном варианте «вытягивается» последняя, рабочая версия данной конфигурации и обновление будет завершено без ошибок.
Рассмотрим подробнее третий способ. Пусть у нас уже есть некоторая конфигурация 1С KORG 1-ой версии, которая работает, но нужно поставить 2-ю версию, то есть обновить версию конфигурации 1С 8.3. Когда происходит обновление, всплывает ошибка «Ошибка при выполнении файловой конфигурации». Порядок действий в этом случае:
1. скачать релиз 1С KORG с версией 1*.cf;
2. копируем нашу базу данных;
3. в конфигураторе, который соответствует обновляемой базе, переходим по пути: «Конфигурация → Поддержка → Настройки поддержки → Снять с поддержки». В случае, если кнопка для снятия с поддержки недоступна, необходимо сперва включить возможные изменения. После этого нужно дать согласие, если система 1С будет уточнять что-либо или подтверждать действия;
4. Далее переходим по следующему пути: «Конфигурация → Сравнить и объединить с конфигурацией из файла…». Здесь необходимо выбрать файл «полный релиз 1С KORG версии 1*.cf»;
5. Далее перед нами появится окно, в котором система 1С будет запрашивать постановление на учёт для поддержки, на это уведомление обязательно отвечаем согласием;
6. В случае, если наша конфигурация является типовой, откроется окно по сравнению конфигураций. В нем обязательно убираем все «галочки». Далее последует объединение конфигураций;
7. В новом окне кликаем на «Сохранить изменения»;
8. Ещё раз сохраняем базу данных;
9. Обновляем конфигурацию 1С стандартным способом.
Если всё сделать, согласно инструкции выше, то в вашей конфигурации 1С 8.3 «Ошибка при выполнении файловой операции» больше не возникнет. Спасибо за внимание!
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Ошибка при чтении файла из эксель в табличный документ?
Я пытаюсь файл эксель прочитать в табличный документ. Файл с форматом «xlsx» читается без проблем, а файл формата «xls» выдает ошибку. В чём ошибка?
-
Вопрос заданболее двух лет назад
-
963 просмотра
1. подробнее какой код…
2. Описание:
Считывает табличный документ из файла.
Позволяет считывать табличный документ из файла табличного документа Microsoft Excel 97 — 2010 ( *.xls и *.xlsx) или электронной таблицы OpenOffice Calc ( *.ods).
Пригласить эксперта
Иногда под расширением .xls на самом деле файл записан в .xlsx
-
Показать ещё
Загружается…
30 янв. 2023, в 12:59
15000 руб./за проект
30 янв. 2023, в 12:56
50000 руб./за проект
30 янв. 2023, в 12:52
5000 руб./за проект
Минуточку внимания
Обновлено 15.10.2020
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов Рунета Pyatilistnik.org. В прошлый раз мы с вами разобрали, что из себя представляет файловая система raw, и как ее исправить, чтобы восстановить свои данные. Двигаемся дальше и поговорим сегодня на тему капризности 1С, точнее на капризную работу в рамках Windows Server 2016. Я рассмотрю причину и устранение периодически повторяющейся ошибки на сервере 1С 8.3 «Ошибка при выполнении файловой операции«. Ее я стал встречать после обновления с Windows Server 2012 R2 д 2016. Думаю мой опыт сэкономит вам часик серфинга по интернету.
Описание проблемы
В моей компании заканчивается обновление операционных систем у виртуальных серверов, с Windows Server 2012 R2 на Windows Server 2016, я понимаю, что поддержка первых еще будет несколько лет, но хочется уже не делать это в последний момент, а слегка опережать, да и уже давно пора стремиться к Windows Server 2019. Сервера 1С не были исключением, обновление происходило по быстрому варианты. Тут подразумевается накатывание более новой версии ОС по верх старой, тут мы убивали двух зайцев:
- Получали свежую версию ОС
- Оставляли весь софт на сервере, и не требовалась его переустановка
В случае чего всегда можно было откатиться из снапшота на момент проведения работ, благо ESXI 6.5 это помогает делать в два клика. Все прекрасно обновилось и сервер зажил новой жизнью. В какой-то момент при запуске клиента 1С 8.3 на RDS ферме, стала появляться ошибка:
Ошибка при выполнении файловой операции
Устранение проблемы
Начав изучать данный вопрос мы не стали откатываться к бэкапу, так как данная проблема возникала не постоянно, а через некоторые промежутки и была вызвана явно не переходом на более новую версию операционной системы. Подняв исторические данные в системе заявок, я нашел похожую, где решением ошибки был перенос базы данных 1С на другой диск. Меня это заинтересовало и я стал прикидывать, что же могло быть в той ситуации. Через минут 20 я нашел одну закономерность, что на всех проблемных хостах был установлен компонент Windows дедупликации, как раз на тех дисках, где располагались базы данных 1С.
Я для тестирования отключил дедупликацию и вернул все в исходное состояние, и о чудо ошибка при выполнении файловой операции больше не появлялась. Все те же действия я произвел и на остальных серверах.
Вывод: Windows Дедупликация и 1С просто не совместимы друг с другом, это нужно запомнить
Из дополнительных методов я могу вам посоветовать еще очистку кэша 1С. Еще в на умных сайтах советуют на серверах, где используется 1С отключать протокол IPv6 на сетевых интерфейсах, но лично я не понимаю этого прикола, так как сама Microsoft советует по возможности этого не делать, в виду того, что очень многие ее сервисы и компоненты Windows в приоритете используют именно его, меньше будет проблем с DNS и Active Directory.
Вообще если у вас виртуальные сервера лежат на системе хранения данных, то у нее должна быть своя функция дедупликации и использовать лучше и правильнее ее. Если у вас есть другие варианты решения данной проблемы, то пишите их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Автор magnifico61, 30 мая 2018, 22:18
0 Пользователей и 1 гость просматривают эту тему.
ФайлНовый = ПолучитьИмяВременногоФайла("xlsx");
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.WorkBooks.Open(Объект.Файл);
Книга.SaveAs(ФайлНовый);
Excel.Quit();
Excel = Неопределено;
Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?
Цитата: magnifico61 от 30 мая 2018, 22:18
Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?
Сохранить сначала в xls-формате, открыть файл в Excel, поддерживающем xlsx и сохранить его в нужном.
Что за конфигурация у Вас, почему возникла потребность в программировании?
УТ 11. Excel поддерживает xlsx.
Руками каждый раз пересохранять файл нет возможности, так как постоянно грузится большое количество данных с разных файлов Excel.
Это необходимо чтобы облегчить работу пользователю.
А сама УТ 11 не поддерживает выгрузку в xlsx-формате?
А если .xlsx выгруженного файла изменить на .xls, открываться будет?
Excel новых версий поддерживает оба формата, так зачем эти «городушки»?
На какой платформе работаете?
в xls не пробовал сохранить.
платформа 8.3.10.2580
Пользовался таким, чтобы пересохранить наоборот, xlsx в xls. Остальные варианты не пробовал но, думаю, всё будет работать.
Функция ПересохранитьЭксельФайл(ПутьКФайлу,ПутьНового=Неопределено,пФорматФайла=51)
Попытка
ExcelЗапущен = Ложь;
//Проверка на существование файла
мФайл = Новый Файл(ПутьКФайлу);
Если НЕ мФайл.Существует() Тогда
ТекстИскл = "[Файл: " + ПутьКФайлу + " не найден.]";
ВызватьИсключение ТекстИскл;
КонецЕсли;
СоответствиеРасширений = Новый Соответствие;
СоответствиеРасширений.Вставить(45, ".mht");
СоответствиеРасширений.Вставить(46, ".xml");
СоответствиеРасширений.Вставить(23, ".csv");
СоответствиеРасширений.Вставить(9, ".dif");
СоответствиеРасширений.Вставить(8, ".dbf");
//работает только в 2007
СоответствиеРасширений.Вставить(51, ".xlsx");
СоответствиеРасширений.Вставить(47, ".xml");
СоответствиеРасширений.Вставить(57, ".pdf");
СоответствиеРасширений.Вставить(60, ".ods");
//
СоответствиеВерсий = Новый Соответствие;
СоответствиеВерсий.Вставить(45, "11.0");
СоответствиеВерсий.Вставить(46, "11.0");
СоответствиеВерсий.Вставить(23, "11.0");
СоответствиеВерсий.Вставить(9, "11.0");
СоответствиеВерсий.Вставить(8, "11.0");
//работает только в 2007
СоответствиеВерсий.Вставить(51, "12.0");
СоответствиеВерсий.Вставить(47, "12.0");
СоответствиеВерсий.Вставить(57, "12.0");
СоответствиеВерсий.Вставить(60, "12.0");
//
Расширение = СоответствиеРасширений.Получить(пФорматФайла);
Если Расширение=Неопределено Тогда
ВызватьИсключение "[Неверно указан параметр ""Формат файла"".]";
КонецЕсли;
Если ПутьНового=Неопределено Тогда
ПутьНового=ПолучитьИмяВременногоФайла(Расширение);
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
ExcelЗапущен = Истина;
Исключение
ВызватьИсключение "[Не удалось запустить Excel.]" + Символы.ПС + ОписаниеОшибки();
КонецПопытки;
//проверка возможности сохранения в выбранный формат
Если Excel.Version < СоответствиеВерсий.Получить(пФорматФайла) Тогда
ВызватьИсключение "[В текущей версии Excel выбранный формат файла ("+Расширение+") не поддерживается.]";
КонецЕсли;
Excel.Visible = Ложь;
Excel.DisplayAlerts = Ложь;
КнигаExcel = Excel.WorkBooks.Open(ПутьКФайлу);
КнигаExcel.SaveAs(ПутьНового, пФорматФайла);
КнигаExcel.Close();
Excel.DisplayAlerts = Истина;
Excel.Quit();
Excel = Неопределено;
Возврат ПутьНового;
Исключение
Если ExcelЗапущен Тогда
Excel.Quit();
КонецЕсли;
КнигаExcel = Неопределено;
Excel = Неопределено;
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
КонецФункции
Если Число(Excel.version) < 12 Тогда
// Excel это ComОбъект(«Excel.application»)
FileFormatNum = -4143// ага, загадочное число
Иначе
FileFormatNum = 56// ну что мешало сделать форматы стандартными?
КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);
отсюда:
https://www.mista.ru/topic.php?id=637830
Банальные мелочи при сохранении в Excel. Боян, но мож кому надо.
При составлении из 1С сложных многостраничных книг в Excel наткнулся на нижеприведенные проблемы, и тк решил их, выкладываю тут. Может кому пригодится )
Если админы посчитают ненужным — сносите смело.
1. «Кривая» расцветка. Цвета абсолютно не те какие закладывались изначально.
Проблема возникает при сборке различных страниц Excel выгруженных из 1С в одну книгу. Тк сборка обычно происходит на основе существующей либо новой книги Excel то палитра книги отличается от палитры сохраняемых из 1С листов. Решение — стандартизировать палитру, подгоняя ее под палитру используемую 1С. Если сборка идет на основе некого шаблона, то надо предварительно на этапе его разработки скопировать туда палитру из «1Сного» листа Excel. Если сборка идет в пустой файл — то просто скопировать палитру (благо это очень просто).
БольшойОтчет.Colors = СтраницаИз1С.Colors;
2. Стандартная сетка Excel зачастую раздражает и мешается. Лучше ее отключать. Например так.
БольшойОтчет.Application.Activewindow.DisplayGridLines = 0;
3. По умолчанию желательно открывать некий определенный лист книги. Делаем:
БольшойОтчет.WorkSheets(Х).Activate(); // где Х — номер листа
4. Вечно один из пользователей отчетов не имеет 2007 хотя бы Excel. Логично что приходится сохранять в xls а не xlsx. Это легко иделать из 1С, а вот используя хз какую версию Excel на компьютере пользователя (которую переодически меняют админы по своему усмотрению) сложнее (тк он для новых книг сам выбирает формат по умолчанию). Приходится анализировать версию:
Если Число(Excel.version) < 12 Тогда
// Excel это ComОбъект(«Excel.application»)
FileFormatNum = -4143 // ага, загадочное число
Иначе
FileFormatNum = 56 // ну что мешало сделать форматы стандартными?
КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);
Собственно все. Удачи.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают
Цитата: wise от 31 мая 2018, 13:19
Иначе
FileFormatNum = 56
lol , в моей функции как раз формат «56», т.е. xls отсутствует. Видимо я именно в xlsx и сохранял, а про xls забыл. Спасибо за подсказку.
Т.е. нужно добавить в мою функцию
СоответствиеРасширений.Вставить(56, ".xls");
СоответствиеВерсий.Вставить(56, "11.0");
Добрый день. Не перестаю умиляться 1С-ом… Лирику прочь…
Довольный как слон, что справился с задачей… расслабился…
1C | ||
|
Ведь дома на бэкапе (как выяснилось, на «толстом» клиенте) работало.
В «облачной» базе… поясняю для точности: «облако» — виртуальная машина, подключение к которой идет внешней программой по RDP. Так вот в штатной «облачной» базе получаю «Метод недоступен на тонком клиенте».
Не беда, академиев не заканчивали..
1C | ||
|
Теперь новая проблема — «Неправильное имя файла tsclientDXXXXXXXXXXимяфайла.xlsx».
Принципиально не хочу просить настроить подключение к «облачной» базе «толстым» клиентом, хочу, чтобы работало всегда.
Что делать с последней ошибкой? Сам думаю, что косяк у провайдера.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь