Имя: Пароль:
1C
1С v8
Загрузка из excel - что не так?
0 ik
 
28.05.19
11:28
Код:
    Приложение = Новый COMОбъект("Excel.Application");
    Приложение.Visible = Ложь;    
    Попытка
        // Открытие файла Microsoft Excel
        Состояние("Открытие файла Microsoft Excel...");
        Файл = Приложение.WorkBooks.Open(Объект.ИмяФайла);

Даёт ошибку
Ошибка при открытии/чтении файла C:\1C\_Base\СКС\Вода  Стоки 2019.xlsx.
{ВнешняяОбработка.ФормированиеСчетовПоДаннымИзExcel.Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Open): Неизвестная ошибка

Если ставлю
    Приложение.Visible = Истина;    
все отрабатывает, но висит открытый excel
1 garantNo4x
 
28.05.19
11:30
а ты уверен что он у тебя не открыт когда ты его открываешь в инвизибле ?
2 ik
 
28.05.19
11:33
Диспетчер задач не кажет.
3 Skylark
 
28.05.19
11:47
>
но висит открытый excel

В смысле? Открывается окно приложения что ли?
Никогда такого не было.

Или в диспетчере задач висит?

А ты по окончании упражнений Эксель то закрываешь?

Типа вот так для надежности:

    // сбросим все переменные
    НашФайл = Неопределено;
    НашЛист = Неопределено;
    Excel.WorkBooks.close();
    Excel.Quit();
    Excel = Неопределено;
4 ik
 
28.05.19
11:50
Да, открывается окно excel. Закрывается по выходу из процедуры.
В диспетчере при незапущенной процедуре не висит.
5 lodger
 
28.05.19
11:51
попробуй так
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        Предупреждение("Ошибка запуска Excel на этом компьютере или терминале.");
        Возврат;
    КонецПопытки;
    
    Excel.DisplayAlerts = 0;
    
    Попытка
        Excel.WorkBooks.Open(ИмяФайла);
    Исключение
        Excel.Quit();
        Excel = 0;    
        Предупреждение("Ошибка открытия файла, возможно он занят другим приложением.");
        Возврат;
    КонецПопытки;
6 Skylark
 
28.05.19
11:52
Попробуй имя файла без пробелов сделать
7 WhiteDragon93
 
28.05.19
11:54
(4) процесс может под другим пользователем запускаться, в зависимости от настроек COM
8 ik
 
28.05.19
11:56
>Попробуй имя файла без пробелов сделать
Не помогло
>процесс может под другим пользователем запускаться, в зависимости от настроек COM
Это персональный комп
9 WhiteDragon93
 
28.05.19
12:05
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Произошла ошибка при обращение к Excel:" + Символы.ПС + ОписаниеОшибки());
    Возврат Неопределено;
КонецПопытки;      
    
Excel.WorkBooks.Open(ПутьДоExcel);


Из последнего что недавно делал - вот этот отработал точно
10 dk
 
28.05.19
12:13
файловая? может он на сервере пытается твой локальный файл открыть?
11 ik
 
28.05.19
12:18
Файловая.
И - ещё раз, ключевое - видимость:
> Приложение.Visible = Истина;    
все отрабатывает, но висит открытый excel

Windows 10, Office 2007
12 ik
 
28.05.19
12:20
К сожалению, не могу читать через Таблицу - много листов.
13 dk
 
28.05.19
12:29
открой вручную этот же файл
может там на макросы матерится или небезопасный файл
14 dk
 
28.05.19
12:34
и дисплейалертс закомменть - увидишь что ему не нравится
15 Ns33
 
28.05.19
12:45
Попробуй такой вариант:

ExcelApp=Новый COMОбъект("Excel.Application");
ExcelApp.DisplayAlerts=0;
        
ConfirmConversions=0;
ReadOnly=1;

Книга=ExcelApp.Workbooks.Open(ТекПутьКФайлу,ConfirmConversions,ReadOnly);
Лист=Книга.Sheets(1);
ExcelApp.Visible=0;
16 ZDenis
 
28.05.19
12:47
Проще же теперь через ТабличныйДокумент грузить. И не требует установленного офиса.
17 88g88
 
28.05.19
13:20
Лови
Функция ПробаЧтения() Экспорт  
    
    Excel = Новый COMОбъект("Excel.Application");  
    Книга = Excel.WorkBooks.Open("Z:\Администраторы 1С\9-2018.xlsx");
    Excel.Visible = 0;
    Excel.ActiveWindow.DisplayWorkbookTabs = 1;
    Excel.ActiveWindow.TabRatio = 0.6;    
    
    Лист = Книга.WorkSheets(1);
    
    ВсегоСтрок = Лист.Cells.SpecialCells(11).Row;//-кол-во строк всего
    
    
    ВсегоКолонок = Лист.Cells.SpecialCells(11).Column;//-кол-во колонок всего
    
    
    
    Для  Ячейка = 5 По ВсегоСтрок Цикл
        Сообщить(Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0"));
        Если Формат(лист.Cells(Ячейка,2).Value,"ЧЦ=11; ЧВН=; ЧГ=0") <> Неопределено тогда
            лист.Cells(Ячейка,3).Value = лист.Cells(Ячейка,2).Value;
            лист.Cells(Ячейка,4).Value = лист.Cells(Ячейка,3).Value;
        КонецЕсли;
    Конеццикла;
    
    FullName = Excel.ActiveWorkbook.FullName;            
    Excel.DisplayAlerts = false;
    Excel.ActiveWorkbook.SaveAs(FullName, 51);// 18 - xls 97-2003; 51 - xlsx 2007-2013
    
    
    //Excel.Visible = 1;       // если нужно поработать дальше с книгой
    
    
    Excel.Application.Quit()// если просто выходим
КонецФункции
18 ik
 
28.05.19
13:55
Увы, ни один из предложенных вариантов не решает.
>Проще же теперь через ТабличныйДокумент грузить. И не требует установленного офиса.
Как работать с несколькими таблицами (страницами)?
19 Ns33
 
28.05.19
14:04
Случайно файл не испорченный? Любой другой файл открывает?
20 ZDenis
 
28.05.19
15:03
(18) ТабличныйДокумент.Области
или ТабличныйДокумент.Области[ИмяЛиста]
или ТабличныйДокумент.Области.ИмяЛиста
или ТабличныйДокумент.ПолучитьОбласть(ИмяЛиста)

Выбирай на вкус
21 ik
 
29.05.19
16:31
(20) Не знал, спасибо. Попробую.
22 ik
 
30.05.19
08:23
Работает.
Возвращает ОбластьЯчеек.
Возник вопрос - как определить количество строк и столбцов в области ячеек?
23 ik
 
30.05.19
08:31
Кстати, не работает
>ТабличныйДокумент.ПолучитьОбласть(ИмяЛиста)
{(1)}: Ошибка при вызове метода контекста (ПолучитьОбласть)
24 ZDenis
 
30.05.19
09:13
(22)     
ОбластьФайла = ТабличныйДокумент.ПолучитьОбласть(ИмяЛиста);
КолВоСтрокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоВертикали();
КолВоКолонокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали();

(23)
{(1)}: Ошибка при вызове метода контекста (ПолучитьОбласть)
Посмотри в отладчике, что у тебя в ТабличныйДокумент

Я читаю файл так:
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
ТабличныйДокумент.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
25 ZDenis
 
30.05.19
09:16
+ 24 Точнее так, я передаю с клиента на сервер сперва файл.

ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
ДвоичныеДанные = ПолучитьИЗВременногоХранилища(АдресВременногоХранилища);
ДвоичныеДанные.Записать(ИмяВременногоФайла);

ТабличныйДокумент = Новый ТабличныйДокумент;
Попытка
ТабличныйДокумент.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);  
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
26 breezee
 
30.05.19
09:43
(5) + ОписаниеОшибки()
27 palsergeich
 
30.05.19
09:45
Зачем в 2к19 Ексель читать ком объектом, когда можно прочитать платформой?
28 ik
 
30.05.19
11:59
БЛИННН!
Контекст же.
ПолучитьОбласть не доступна на клиенте.
Всё получилось, спасибо.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан