1С 8: Работаем с файлами MS Excel, используя OpenOffice/LibreOffice

Публикация № 87317 13.07.11

Пользовательские инструменты - Загрузка и выгрузка в Excel

Работа через COM с файлами MS Excel, используя OpenOffice/LibreOffice.

Есть ситуации, когда нет возможности установить Excel на стороне клиента, а нужно загружать в базу данные *.xls файлов. Спасением является бесплатный OpenOffice (либо LibreOffice, т.к. работа через COM с ними абсолютно одинакова).

Ниже привожу процедуры загрузки и выгрузки.

Функция ЗагрузитьТЗизФайла(ПутьКФайлу)

    //OpenOffice Calc//////////////////////////////////////////////////////////////////////////////////////////////
    Попытка
        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice\LibreOffice не установлена на данном компьютере!");
    Возврат Неопределено;
    КонецПопытки;
    Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства.Name = "AsTemplate";
    Свойства.Value = Истина;
    Args = Новый COMSafeArray("VT_VARIANT", 2);
    Args.SetValue(0, Свойства);
    Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства1.Name = "Hidden";
    Свойства1.Value = Истина;
    Args.SetValue(1,Свойства1);
    Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0, Args);
    Sheets = Document.getSheets();
    Sheet = Sheets.getByIndex(текЛист-1);
    локТабЗнач = Новый ТаблицаЗначений;
    begCol = 0;
    begRow = 0;
    endCol = Sheet.Data.GetLength(6) - 1;
    endRow = Sheet.Data.GetLength() - 1;
    нКол = 0;
    локТабЗнач.Колонки.Очистить();

    КС = Новый КвалификаторыСтроки(50);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));

    ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС);

    Пока нКол <= endCol Цикл
        ИмяКол = "К"+Строка(нкол+1);
        локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока);
        нКол = нКол + 1;
    КонецЦикла;
    Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow);
    МассивКом = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count);
    МассивКом = Range.getDataArray();
    тмпПростойМассив = МассивКом.Выгрузить();
    Для каждого массив из тмпПростойМассив Цикл
        ит = 0;
        НовСтрока = локТабЗНач.Добавить();
        Для каждого ЭлементМассива из массив цикл
            НовСтрока[ит] = ЭлементМассива;
            ит = ит + 1;
        КонецЦикла;
    КонецЦикла;
    Возврат локТабЗнач;

КонецФункции

Как  видно из функции  ЗагрузитьТЗизФайла - читается сразу вся область данных файла, поэтому с быстродействием все отлично. На выходе имеем готовую таблицу значений. В данном случае каждой колонке определен тип Строка(50), но можно этого и не делать, просто это нужно, если собираетесь, например, помещать ее во временную таблицу. 

Процедура ВыгрузитьТЗвФайл(ТаблицаРезультата)

    //OpenOffice Calc///////////////////////////////////////////////////////////////////////////
    Попытка
        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!");
        Возврат;
    КонецПопытки;
    Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства.Name = "AsTemplate";
    Свойства.Value = Истина;
    Args = Новый COMSafeArray("VT_VARIANT", 3);
    Args.SetValue(0, Свойства);
    Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства1.Name = "Hidden";
    Свойства1.Value = Истина;
    Args.SetValue(1, Свойства1);
    Document = Desktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Args);
    Sheets = Document.getSheets();
    Sheet = Sheets.getByIndex(0);
    мИтКол = 0;
    Для каждого кол из ТаблицаРезультата.Колонки Цикл
        Sheet.getCellByPosition(мИтКол,0).setString(кол.Имя); 
        мИтКол = мИтКол + 1;
    КонецЦикла
   
    ВсегоСтрок = ТаблицаРезультата.Количество();
    ВсегоКолонок = ТаблицаРезультата.Колонки.Количество();
    МассивКОМ = Новый COMSafeArray("VT_VARIANT", ВсегоСтрок,ВсегоКолонок);
    иткол = 0;
    итстр = 0;

    Для каждого стр из ТаблицаРезультата Цикл
        Для каждого кол из ТаблицаРезультата.Колонки Цикл
            стрРез = СокрЛП(стр[кол.Имя]);
            МассивКОМ.SetValue(итстр,иткол,стрРез);
            иткол = иткол+1;
         КонецЦикла;
        иткол = 0;
        итстр = ?(итстр=ВсегоСтрок,0,итстр+1);
    КонецЦикла;
    begCol = 0;
    begRow = 1;
    endCol = ВсегоКолонок-1;
    endRow = ВсегоСтрок;
    Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow);
    Range.setDataArray(МассивКОМ);
    //Document.storeToURL(ПривестиФайлКУРЛ(ПутьКФайлу),Args);
    Свойства2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства2.Name = "FilterName";
    Свойства2.Value = "MS Excel 97";
    Args.SetValue(2,Свойства2);
    Document.GetCurrentController().GetFrame().GetContainerWindow().SetVisible(Истина);
    //Document.storeToURL(ПривестиФайлКУРЛ(ФайлКартотеки),Args);

КонецПроцедуры

Процедура  ВыгрузитьТЗвФайл сохраняет любую таблицу значений в файл MS Excel. В текущем примере откроется OpenOffice/LibreOffice Calc  c данными переданной таблицы значений. Если раскомментировать строки:

//Document.storeToURL(ПривестиФайлКУРЛ(ПутьКФайлу),Args);

 ...................................................

//Document.storeToURL(ПривестиФайлКУРЛ(ФайлКартотеки),Args);

и закомментировать

Document.GetCurrentController().GetFrame().GetContainerWindow().SetVisible(Истина);

при этом добавив Параметр ПутьКФайлу, то данные запишутся в файл без открытия Calc`a. Если обратить внимание на сохранение, то сразу бросается двойной вызов  Document.storeToURL - это необходимо для корректного сохранения в формате MS Excel.

Функция ПривестиФайлКУРЛ(ПутьКФайлу)

    ПутьКФайлу = СтрЗаменить(ПутьКФайлу," ","%20");
    ПутьКФайлу = СтрЗаменить(ПутьКФайлу,"\","/");
    Возврат "file:/" + "/localhost/" + ПутьКФайлу;

Конецфункции 

Функция  ПривестиФайлКУРЛ просто приводит путь к виду, необходимому OpenOffice/LibreOffice.

Вот и все. Как вы смогли убедиться -  работа с Calc`ом не сложнее таковой с Microsoft Excel.

Специальные предложения

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. MaxDavid 127 13.07.11 22:11 Сейчас в теме
Плюс даже не пробуя, ибо некогда сталкивался с ООо и представляю, сколько времени может сэкономить статья.
OrsaMaggiore; romansun; +2 Ответить
56. tmixsam 55 26.05.20 15:18 Сейчас в теме
//Сохраняю таблицу отчета в xls файл
	ТабДок = Новый ТабличныйДокумент;
	
        //Заполняю ТабДок данными
	
	ИмяФ = КаталогВременныхФайлов()+"Задание1.xls";
	ТабДок.Показать("Задание1");
	ТабДок.Записать(ИмяФ, ТипФайлаТабличногоДокумента.XLS97);
	
//В дополнительной процедуре открываю этот файл как ComObject 
//вида Эксель или OpenOffice 
//и заполняю параметры страницы, которые не сохранились при выгрузке в xls файл
	ПараметрыСтраницыЭксельФайла(ИмяФ,"Ландшафт",100,спРазделителей);
	Сообщить("Записан файл: "+ИмяФ);

//Вопрос: Как для OpenOffice в файле вставить разрыв по строке, если знаешь номер строки
//где надо этот разрыв вставлять.

Процедура ПараметрыСтраницыЭксельФайла(Знач ПутьКФайлу,ЛандшафтПортрет,Масштаб,спРазделителей = Неопределено)
	Попытка //Попытка в Excel
		Эксель = Новый COMОбъект("Excel.Application");
		Эксель.Visible = 0;      //0 - Excel не виден, 1 - виден.
		Эксель.DisplayAlerts = False;  //Отключаем всякие вопросы со стороны Excel
		Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
		Лист = Книга.WorkSheets(1);
		//Лист = Книга.WorkSheets(ИмяЛиста);
		//Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
		//Лист.Columns(НомерКолонки).ColumnWidth = Ширина;
		Лист.PageSetup.Zoom = Масштаб;
		Лист.PageSetup.Orientation = ?(ЛандшафтПортрет = "Портрет",1,2);
		Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(1);   //1 сантиметр
		Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(1);
		Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(1);
		Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(1);
		
		Если спРазделителей <> Неопределено Тогда
			Для каждого ЭлемРазд Из спРазделителей Цикл
			    НомРазд = ЭлемРазд.Значение;
				АдресЯчейки = "A"+СокрЛП(НомРазд);
				АдресЯчейки = СтрЗаменить(АдресЯчейки," ","");
				Лист.HPageBreaks.Add(Лист.Range(АдресЯчейки)); 
			КонецЦикла; 
		КонецЕсли; 
		
		Попытка
			Книга.SaveAs(ПутьКФайлу);
		Исключение
			Сообщить(ОписаниеОшибки()+" Не установлены параметры печати для файла "+ПутьКФайлу);
		КонецПопытки;
		Эксель.WorkBooks.Close();
		Эксель = 0;
		
	Исключение
		//Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
		Попытка //Попытка в OpenOffice
			//Открыть файл
			Попытка
				СервисМанагер = Новый  COMОбъект("Com.Sun.Star.ServiceManager");
			Исключение
				Сообщить("Не могу создать объект Open Office!
				| - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);   
				Возврат;
			КонецПопытки;
   
			МакетОформления = Неопределено;
			// Откроем табличный документ
			Попытка
			Скрипт = новый COMОбъект("MSScriptControl.ScriptControl");
			   Скрипт.language = "javascript";
			   Скрипт.eval("Massiv=new Array()");             
			   Массив = Скрипт.eval("Massiv");
			   Скрипт.AddObject("СервисМанагер",СервисМанагер);
			   Скрипт.eval("Massiv[0]=СервисМанагер.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
			   Скрипт.eval("Massiv[0].Name='Hidden'");
			   Скрипт.eval("Massiv[0].Value=true");
			Исключение
				Сообщить("Не могу открыть объект Open Office, возможно надо использовать 32х разрядную версию 1С!
				| - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);   
				Возврат;
			КонецПопытки;
			Стол = СервисМанагер.createInstance("com.sun.star.frame.Desktop");
		    Документ = Стол.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0,Массив);
			
			Документ.lockControllers();
			Документ.addActionLock();

			Листы=Документ.getSheets();
			ЛистДанные=Листы.getByIndex(0);

			СтилиСтраницы=Документ.StyleFamilies.getByName("PageStyles");
			ПараметрыСтраницы=СтилиСтраницы.getByName(ЛистДанные.PageStyle);

			//Параметры страницы
			
			//Установка полей
			//ПараметрыСтраницы.LeftMargin   = ТабДокумент.ПолеСлева  * 100;
			//ПараметрыСтраницы.RightMargin  = ТабДокумент.ПолеСправа * 100;
			//ПараметрыСтраницы.TopMargin    = ТабДокумент.ПолеСверху * 100;
			//ПараметрыСтраницы.BottomMargin = ТабДокумент.ПолеСнизу  * 100;
			ПараметрыСтраницы.LeftMargin   = 1000;     //1 см
			ПараметрыСтраницы.RightMargin  = 1000;     //1 см
			ПараметрыСтраницы.TopMargin    = 1000;     //1 см
			ПараметрыСтраницы.BottomMargin = 1000;     //1 см

			//Установка ориентации
			//Если ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт Тогда
			Если ЛандшафтПортрет = "Ландшафт" Тогда
			   ПараметрыСтраницы.IsLandscape = Истина;
			   ПараметрыСтраницы.Width  = 29700;
			   ПараметрыСтраницы.Height = 21000;
			Иначе
			   ПараметрыСтраницы.IsLandscape = Ложь;
			   ПараметрыСтраницы.Width  = 21000;
			   ПараметрыСтраницы.Height = 29700;
			КонецЕсли;

			//Установка масштаба печати
			//ПараметрыСтраницы.PageScale = ТабДокумент.МасштабПечати;
			ПараметрыСтраницы.PageScale = Масштаб;

		    //Установим разделители страниц, 
			//в списке разделителей номера строк, перед которыми ставим разделитель
			Если спРазделителей <> Неопределено Тогда
				Для каждого ЭлемРазд Из спРазделителей Цикл
				    НомРазд = ЭлемРазд.Значение;
					ТекЯчейка = ЛистДанные.GetCellbyPosition(1,НомРазд);
					ТекКурсор = ЛистДанные.createCursorByRange(ТекЯчейка);
					Попытка
						//АдресЯчейки = "$A$"+СокрЛП(НомРазд);
						//АдресЯчейки = СтрЗаменить(АдресЯчейки," ","");
						//ТекКурсор.InsertRowBreak(ТекЯчейка);
						//ТекКурсор.InsertRowBreak();
						//Сд.executeDispatch(ЛистДанные, ".uno:InsertRowBreak", "", 0, НомРазд);
						//КАК ЗДЕСЬ ВСТАВИТЬ на ЛистДанные РАЗРЫВ СТРОКИ перед строкой с номером НомРазд???
						
					Исключение
						Сообщить("Не удалось установить разрывы страниц в файле: "+ПутьКФайлу);
					КонецПопытки;
				КонецЦикла; 
			КонецЕсли; 
		
			//Сохранение документа
			Документ.unlockControllers();
			Документ.removeActionLock();
			Документ.store();
			Документ.Close(Истина);

			//Отключаем COM - соединение
			Стол.terminate();			
		Исключение
			Сообщить(ОписаниеОшибки() + " Программы Exсel и OpenOffice Calc не установлены на данном компьютере! Не получилось задать параметры страницы у файла.");
			Возврат;
		КонецПопытки;
	КонецПопытки;
КонецПроцедуры
Показать
2. romansun 192 13.07.11 23:03 Сейчас в теме
+1 всем - совершенно согласен


добавлю, что ОО не использовал - для тех, у кого не было офиса, использовал ADO. Оч. удобно и, главное, огромные эксели "засасывает" как реактивный пылесос ))
theshadowco; +1 Ответить
3. IgorXml 14.07.11 14:52 Сейчас в теме
4. cool.vlad4 2 14.07.11 15:51 Сейчас в теме
В общем да...гуд...добавлю в защиту 1С-овцев и плюс к статье, что кое-какие ф-ции по работе с ОО ими написаны в модуле УправлениеПечатьюOOWriterКлиент (БСП)
okulus; Трактор; +2 Ответить
5. cleaner_it 215 16.07.11 05:34 Сейчас в теме
Большой жирный плюс. Использую OpenOffice (в последнее время LibreOffice) уже 4 года - мне очень пригодится. Да и другим, думаю, тоже
40. medved_kot 8 13.07.14 12:29 Сейчас в теме
Просто хотел откомментировать код
endCol = Sheet.Data.GetLength(6) - 1;
endRow = Sheet.Data.GetLength() - 1;


Это получение последней колонки и строки, которые вообще заполнены в таблице.

тмпПростойМассив = МассивКом.Выгрузить();

в тмпПростойМассив массив Строк и Столбцов, к которому можно обращаться:
Значение = тмпПростойМассив[номерСтроки - 1][номерСтолбца - 1]

И да. Спасибо!
user747857; +1 Ответить
7. StreamLVM 18.07.11 11:05 Сейчас в теме


Я умею пользоваться поиском и прежде чем написать статью я искал и находил эти ссылки:
1)http://infostart.ru/public/14718/ Пример работы с OpenOffice.org Writer & MS Word
У меня работа с Сalc

2)http://infostart.ru/public/20710/ Создание PDF из OpenOffice.
хорошая статья, но опять не то

3)http://infostart.ru/public/58070/ Пример выгрузки документа в Excel и отправка по E-mail средствами 1С
здесь 1с 7.7

4)http://infostart.ru/public/59625/ Выгрузка в OpenOffice Calc. Платформа 7.7. Формирование прайса и формы заказа
тоже 1c 7.7

5)http://infostart.ru/public/73507/ Обработка файлов OpenOffice Calc без установленного OpenOffice и ВК
что хоть с этой статьей общего???

6)http://infostart.ru/public/73948/ Пример работы с Open Office Writer. Часть 2. Подмена контекста без OLE. Работает намного быстрее.
и здесь что-то общее, кроме слова OpenOfiice

В каждой из приведенных вами статей есть упоминание слова OpenOffice, хотя общего между ними немного. Они все баяны? Вы хоть просмотрели бы их чтоли...
temdj; papche; torg1c; Keu2; rayastar; vis_tmp; Serj1C; +7 Ответить
8. drimer 59 19.07.11 11:31 Сейчас в теме
Отличная статья!
Вкралась небольшая ошибочка в пример
локТабЗнач.Колонки.Добавить(НовИмяКол,ОписаниеТиповСтрока);

а должно быть локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока);
9. StreamLVM 19.07.11 12:18 Сейчас в теме
drimer пишет:

Вкралась небольшая ошибочка в пример
локТабЗнач.Колонки.Добавить(НовИмяКол,ОписаниеТиповСтрока);

а должно быть локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока);

Спасибо, поправил. Выдернул с последнего задания и не все привел к нужному виду.
10. Resha 27.07.11 11:50 Сейчас в теме
Методы:
endCol = Sheet.Data.GetLength(6) - 1;
endRow = Sheet.Data.GetLength() - 1;

Не корректно работают для больших файлов.

Для проверки можно ручками создать файл вида:
A_000001	B_000001	C_000001	D_000001	E_000001	F_000001
A_000002	B_000002	C_000002	D_000002	E_000002	F_000002
....
A_046000	B_046000	C_046000	D_046000	E_046000	F_046000


В результате получим:
endCol = -1;
endRow = 0;


Вариант до 001000 - работает отлично.
18. alex_shkut 58 15.01.12 16:17 Сейчас в теме
Для применения с LibreOffice необходимо маленькая поправка. Я долго искал ответ, почему именно так, но не нашел. Методом "тыка" нашел работающее решение.
endCol = Sheet.Data.GetLength(10) - 1;

Значение в скобках (10) - найдено экспериментально. Я так понимаю - это значение массива, где хранится максимальная занятая на данный момент колонка таблицы. С OpenOffice не проверял. Проверено на LibreOffice 3.4
44. CaSH_2004 370 18.06.15 23:57 Сейчас в теме
Мда, метод красивый, быстрый, но глючный.
Во-первых:
(10)(40) Sheet.Data.GetLength некорретно работает не только на больших файлах, но и на маленьких
я для примера создал файл с 3 колонками и 3 строками и прочел его - выдало что колонок > 9 000 000 !!! непонятно что его так глючит
Во-вторых:
это обнаружил после того как на одном из прайсов он не видел последнюю колонку, выдавал на одну меньше и все
В-третьих:
на VBScript его даже не удалось воспроизвести т.к. такого объекта как Data просто не существует!
во всяком случае тут
http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/module-ix.html
я этого не нашел

возникает вопрос - что это за зверь такой?
в какой момент он как сработает неизвестно, поэтому его нужно либо перепроверять либо вообще не пользоватся дабы он не подвел в самый неподходящий момент, как получилось у меня после сдачи работы это все всплыло как г-но в проруби

Придется все таки пользоватя медленным, но надежным старым считываением:
CellCursor = Sheet.CreateCursor();
CellCursor.GoToStartOfUsedArea(Ложь);
CellCursor.GoToEndOfUsedArea(Истина);
CellRangeAddress = CellCursor.GetRangeAddress();
ПоследняяКолонка = CellRangeAddress.EndColumn;
ПоследняяСтрока = CellRangeAddress.EndRow;


PS: тестил на OpenOffice 4.1.1 + 1С:Предприятие 8.2 (8.2.19.90)
vitaliylyalin7000; +1 Ответить
45. StreamLVM 206 19.06.15 12:42 Сейчас в теме
(44) CaSH_2004, У меня подобные глюки при работе с сохраненными файлами из древних версий MS Excel. Я рекомендую все же использовать LibreOffice.
46. CaSH_2004 370 19.06.15 22:39 Сейчас в теме
(45) А я вот наоборот не рекомендую пока им пользоваться , и вот почему:
в первый и последний раз я увидел LibreOffice пол года назад у одного клиента которому его тоже какой-то сисадмин расхвалил и поставил вместо проверенного OpenOffice.
Потом мне потребовалось сделать выгрузку прайса с картинками, так после долгих извращений и мучений (что-то не корректно шло оформление) LibreOffice перестал открывать и создавать файлы (я его сильно мучил, честно) - после этого я его снес и пользуюсь проверенным OpenOffice.
48. StreamLVM 206 23.06.15 18:14 Сейчас в теме
(46) CaSH_2004, Вы не закрывали com объект и он завис. Завершили бы процесс и все работало. А насчет LibreOffice vs OpenOffice, так работа в Libre идет конскими шагами, причем попутно избавляясь от Java в коде, да и по функционалу он впереди, хотя для 90% пользователей это непринципиально.
49. CaSH_2004 370 02.07.15 13:20 Сейчас в теме
(48)
Вы не закрывали com объект и он завис. Завершили бы процесс и все работало.

Я его даже не открывал. Я говорил про то что LibreOffice под любым пользователем перестал открываться - просто вылетал с какой то ошибкой системной.
Libre идет конскими шагами

я человек, а не конь, поэтому мне это не нужно :)
по функционалу он впереди, хотя для 90% пользователей это непринципиально.

Вот это верно на 100% - зачем ставить новое если с головой хватает старого? Новый функционал никто не использует т.к. все борются с новыми глюками!

ИМХО:
Как видим даже старый функционал никто толком не знает (судя по этой статье), а это как раз из-за того что постоянно выходит все новое, в надежде избавится от проблем старого, но естественно этого не происходит, зато к старым проблемам прибавляются новые, и из-за того что приходится бросать все силы на исправление ошибок, соответственно не хватает времени не то что на развитие и изучение нового,но даже на себя :(
Это как раз случай "придумываем себе трудности чтобы их потом героически преодолевать".
50. CaSH_2004 370 25.08.15 00:14 Сейчас в теме
(48) Вот одна из причин из-за чего нет смысла в LibreOffice несмотря на ее "конский шаг"
Open Calc Report System - смотрим комменты 15-16
Буду благодарен если и вы скините мне что то в защиту своей позиции.
47. CaSH_2004 370 19.06.15 22:56 Сейчас в теме
+(44) Собственно чтобы обойти указанный глюк достаточно заменить получение последней колонки/строки автора на вариант (44), но вот более подробно:
Cursor = Sheet.CreateCursor();
Cursor.GoToStartOfUsedArea(Ложь); // непонятно почему Ложь
Cursor.GoToEndOfUsedArea(Истина); // а тут Истина
КоличествоЗаполненныхКолонок		= Cursor.Columns.Count;
КоличествоЗаполненныхСтрок		= Cursor.Rows.Count;
RangeAddress = Cursor.GetRangeAddress();
ПерваяЗаполненнаяКолонка		= RangeAddress.StartColumn;
ПерваяЗаполненнаяСтрока			= RangeAddress.StartRow;
ПоследняяЗаполненнаяКолонка		= RangeAddress.EndColumn;
ПоследняяЗаполненнаяСтрока		= RangeAddress.EndRow;
Показать

в (19) коллега не учел что работать это будет только если у него заполнение листа идет с самой первой строки и колонки, т.к. это не просто количество строк и колонок всего, а именно ЗАПОЛНЕННЫХ, т.е. по сути:
КоличествоЗаполненныхКолонок = ПоследняяЗаполненнаяКолонка - ПерваяЗаполненнаяКолонка + 1; // т.е. + сама 1-я колонка
КоличествоЗаполненныхСтрок = ПоследняяЗаполненнаяСтрок - ПерваяЗаполненнаяСтрок + 1; // т.е. + сама 1-я строка

Кстати для информации колонок предусмотрено 1024, а строк 1024*1024 = 1 048 576, во всяком случае Cursor.Columns/Rows.Count именно это возвращают пока не выполнишь позиционирование Cursor.GoTo...
(0) в добавок ко всему непонятно зачем тут
МассивКом = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count);
МассивКом = Range.getDataArray();

автор в переменную МассивКом помещают SafeArray, а потом затирают так и не используя. Я убрал это и все продолжает работать. Может автор или кто-то подскажет для чего это нужно?

PS: в результате разбирания и выкидывания мусора весь пример сократился в 2-3 раза! Там реально много лишнего, коллеги проверяйте выкладываемый код что-ли, а то мусор лопатой выкидываешь
ejkov; sinto; +2 Ответить
11. Resha 27.07.11 12:39 Сейчас в теме
Обнаружил, что максимальное число строк, которых понимает OpenOffice, при чтении xls файлов: 2^15 - 1 = 32767. Если хоть на одну больше - алгоритм не работает.
Ekaterina Lebedenko; CaSH_2004; +2 Ответить
12. alex_shkut 58 30.09.11 13:24 Сейчас в теме
Спасибо огромное, то что надо, кто отходит от пиратки или не имеет официального МСО.
Попробовал использовать в своей конфигурации и не могу понять, откуда возникает переменная в функции загрузки
Sheet = Sheets.getByIndex(текЛист-1);

Могу предположить (так и сделал) что текЛист можно передавать в качестве параметра функции.
13. Vital451 91 21.10.11 07:45 Сейчас в теме
А что за "ФайлКартотеки" нужно подставить ?
14. alex_shkut 58 21.10.11 19:33 Сейчас в теме
Vital451 пишет:
А что за "ФайлКартотеки" нужно подставить ?

Это пример вызова функции в которой в Переменной "ФайлКартотеки" передается Виндовый путь к файлу полностью, типа: D:\\Мои Документы\файл.xls
15. megatrend 126 16.11.11 18:21 Сейчас в теме
Для LibreOffice этот код будет работать? Или его нужно менять в части вызова COM-объекта офиса?
16. StreamLVM 16.11.11 20:16 Сейчас в теме
(15) megatrend, все будет работать, ничего не нужно менять.
17. RustIG 05.12.11 13:56 Сейчас в теме
за публикацию плюс,
(0) хотелось бы видеть код с комментариями...
вникать в процедуры и методы объектов ОупенОфиса пришлось отдельно,
спасибо за дельные ссылки Трактору (6) ...
Для начинающих осваивать ОупенОфис в плане программирования продублирую ссылки,
так сказать в качестве основы основ:
- http://articles.org.ru/cn/showdetail.php?cid=6064 - основы работы с объектами ОупенОфиса на форуме для Дельфистов, также эта ссылка есть в публикации http://infostart.ru/public/59625/ , на которую указал Трактор
- http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide/Editing_Spreadsheet_Docum­ents - документация по объектам ОупенОфиса на англ. языке
- http://infostart.ru/public/20710/ - статья Трактора с комментариями
CaSH_2004; +1 Ответить
19. Resha 24.01.12 02:08 Сейчас в теме
Так же копался с этой проблемой и нашел несколько другое решение:
Document = Desktop.LoadComponentFromURL("file:///" + ПолноеИмяФайла, "_blank", 0, Параметры);
Листы    = Document.getSheets(); 
Лист     = Листы.getByIndex(НомерЛиста - 1); 
Курсор   = Лист.createCursor();
Курсор.gotoEndOfUsedArea(Истина);
КонечнаяСтрока   = Курсор.Rows.Count - 1;
КонечнаяКолонка  = Курсор.Columns.Count - 1;

Пока работает на всех файлах, что попадались (больше 65536 строк не попадались).
alex_shkut; +1 1 Ответить
20. alex_shkut 58 10.02.12 14:52 Сейчас в теме
Вполне согласен, решение более корректное, чем мое. Спасибо :) поправлю свой код.
21. Bober777 26 18.05.12 12:59 Сейчас в теме
Плюсанул с огромным удовольствием. Статья стоит того. Я бы хотел единственное попросить автора привести пример. Как одновременно прочитать данные с файла ods и тут же отредатировать читаемый файл (например в одной колонке в определенной строке найти Артикул и в той же строке отредактировать ячейку другого столбца претаоложим это будет количество).
Спасибо за внимание.
22. alex_shkut 58 18.05.12 13:22 Сейчас в теме
(21) Bober777,
прочитать данные с файла ods и тут же отредатировать читаемый файл

Задача не совсем корректна, однако попробую предположить...
1. Если Вы хотите сформировать новый файл, то сформируйте его средствами 1С и сохраните в формате XLS.
2. Вы имеете некий "сводный" файл, куда каждое подразделение вносит свои поправки?
Из данного примера мне пригодилось именно "чтение" файла для импорта в 1С всяких "табличек". Остальные задачи либо "прихоти" неграмотных руководителей, не желающих изучать 1С, либо неправильно поставленный процесс обмена информацией.
LibreOffice прекрасно открывает и читает формат XLS, так почему-же не выгружать из 1С информацию в этом формате?
З.Ы. Даю намек по п.2 - используете из данного примера создание COM-объекта, загружаете информацию из файла в таблицу значений, редактируете ее как Вам угодно и синхронизируете все свои действия средствами COM c открытым файлом. Потом корректно закрываете его, и все. Примеры на сайте OpenOffice имеются. Если это действительно необходимо - изучайте вопрос и плюс Вам в публикацию.
З.Ы. З.Ы. Можно не выгружать в ТЗ, а в фоновом режиме (обработкой) сделать изменения через COM.
23. Bober777 26 18.05.12 13:30 Сейчас в теме
Хорошо, если у меня будут еще вопросы технического характера, я могу их задавать?
24. alex_shkut 58 18.05.12 13:31 Сейчас в теме
(23) Bober777, Я думаю - что да. Только уточните свою задачу.
26. Bober777 26 20.05.12 09:53 Сейчас в теме
(24)
Только уточните свою задачу.

задачу уточнил:
- скопировать файл с расширением "*.ods" обозвать его определенным именем - это не проблема выполняется стандартными процедурами 1С.
- отредактировать скопированный файл в формате *.ods поиском определенных строк по заполненому значению в столбце "номер 1" и отредактировать столбец "номер 2" в найденой строке.
- сохранить отредактированный файл в формате *.ods без участия пользователя автоматически.

Задача вроде как бы простая, знаю как решается, если работать с файлами *.xls.

А в данной задаче сам момент редактирования не знаю как решить (выполнить),
- конечно можно было бы взять сначала данные и загрузить из файла *.ods в таблицу значений;
- затем обработать данные в загруженной таблице значений;
- потом выгрузить данные из таблицы значений в файл;
Но думаю данный метод не подходит.
27. alex_shkut 58 21.05.12 13:53 Сейчас в теме
(26)
Намек 1: формат .ods - аналог .xlsx, т.е. просто смени расширение и получишь Эксель-файл.
Намек 2: используй всю мощь COM-механизма. Ну тут сложнее, т.к. придется дублировать действия в 1С соответствующими функциями COM-объекта. Я интересовался этой возможностью в свете данной публикации, но писать серьезный модуль нету времени и необходимости. Ссылки на документацию есть выше.

- конечно можно было бы взять сначала данные и загрузить из файла *.ods в таблицу значений;

Да, можно так. Оставляем файл .ods открытым... и подключенным к 1С.
- затем обработать данные в загруженной таблице значений;

А вот здесь нужно каждое изменение дублировать вызовом изменения в исходном файле, т.е. по сути написать свой редактор .ods на основе механизма COM. Подобными извратами я занимался, когда работал с БД Access, но самомго офиса у меня не было. Все писал на Делфи.
- потом выгрузить данные из таблицы значений в файл;

Все это мы делали синхронно в предыдущем пункте, теперь просто сохраним и закроем файл.

Вот такой себе алгоритм...
25. alex_shkut 58 18.05.12 13:42 Сейчас в теме
Эксель и ОпенОфис хранит дату в виде целого числа. Если загрузить файл в ТЗ - в колонках дат будут целые числа.
Код ниже преобразовывает такие колонки в дату 1С. Устанавливаете курсор в нужную колонку, и запускаете этот код.
Процедура КоманднаяПанель2ВосстановитьДаты(Кнопка)
	Колонка = ЭлементыФормы.ДанныеФайла.ТекущаяКолонка; //ДанныеФайла - табличное поле с загруженными данными
	Для Каждого Строка из ДанныеФайла Цикл
		Если ЗначениеЗаполнено(Строка[Колонка.Имя]) Тогда
			Попытка //Если в колонке неправильная дата или любое нечисловое значение, то пропускаем
				Строка[Колонка.Имя] = Дата("19000101")+((Строка[Колонка.Имя]-2)*24*60*60);
			Исключение
			//Здесь можно сделать вывод списка или подсчет ошибочных ячеек, например
			КонецПопытки;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
CaSH_2004; +1 Ответить
36. alex_shkut 58 04.04.14 13:26 Сейчас в теме
(25)Увидел в своем же сообщении логическую ошибку.
При преобразовании числа в дату
Строка[Колонка.Имя] = Дата("19000101")+((Строка[Колонка.Имя]-2)*24*60*60);

надо брать не
Дата("19000101")
, а каким-то образом считывать из файла диапазон интерпретации дат.
И использовать начальную, как точку отсчета.
Я не пробовал, но для чего тогда настройка интерпретации дат?
28. bent 30.05.12 12:48 Сейчас в теме
Большое спасибо за статью. Очень помогла.
Единственное , через раз при загрузке появляется вот такая ошибка:

Ошибка при вызове метода контекста (getCellRangeByPosition)
	Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow);
по причине:
Произошла исключительная ситуация ([automation bridge] ): com.sun.star.lang.IndexOutOfBoundsException: 

Подскажите, пожалуйста, с чем это может быть связано..
29. alex_shkut 58 31.05.12 12:35 Сейчас в теме
(28) Пожалуйста, внимательно потестируйте пример. Возможно, что ошибка возникает в конкретном, определенном случае, на одном и том-же файле. Например: Вы обращаетесь к несуществующему, или возможно, пустому листу.
Я дописал свой вариант функции для обращения к любому листу в файле и к произвольному диапазону на листе.
Все работает без ошибок.
30. bent 31.05.12 15:38 Сейчас в теме
(29) alex_shkut, в том-то и дело, что загружаю один и тот же файл. Как раз пишу обработку по загрузке, поэтому тестирую одну и ту же таблицу. Программа именно через раз загружает. Нажимаю "загрузить" - показывает ошибку, которую описывала выше, тут же пробую еще раз - загружает.
В результате вчера,задала свое значение переменной endCol, зная, что в данной конкретно обработке оно у меня меняться не будет.
31. alex_shkut 58 31.05.12 16:20 Сейчас в теме
(30)В самом начале, когда я тестировал код на OpenOffice у меня возникали проблемы. Офис "повисал" в памяти и начинались глюки. Позже я добавил в конец функции вот такой код:

...
КонецЦикла;
Document.Close(True);
Document = Неопределено; 

ServiceManager = Неопределено;
Возврат локТабЗнач;


В общем смысле я закрываю документ и очищаю указатель. Офис перестал зависать в процессах и больше ошибок не появлялось. Может это решение?
32. vis_tmp 31 07.11.12 07:53 Сейчас в теме
(31) alex_shkut,

Правильнее, думаю, так делать:

ServiceManager = Неопределено;
Document.close(True);
Desktop.terminate();
33. vis_tmp 31 07.11.12 08:07 Сейчас в теме
ОГРОМНОЕ СПАСИБО АВТОРУ!
34. Shade 2 19.03.14 09:13 Сейчас в теме
Спасибо :)
Прикрепленные файлы:
35. Dimkis 03.04.14 08:26 Сейчас в теме
Спасибо, за статью, очень помогла!!!
37. Karlitos 17.04.14 09:34 Сейчас в теме
Подскажите, пожалуйста, что должно быть в переменной "ТекЛист"?..
38. StreamLVM 206 17.04.14 14:40 Сейчас в теме
(37) Karlitos, номер листа в вашем файле.
39. Karlitos 25.04.14 11:39 Сейчас в теме
(38) StreamLVM, ага, я разобрался) Спасибо за статью, помогла!
41. al_zzz 261 24.02.15 21:53 Сейчас в теме
Подскажите пожалуйста, как мне переделать процедуру сохранения тз, чтоб создавался не файл ексель, а файл в формате "DIF" и в кодировке CP-866?
42. dismoitout 20 28.05.15 12:11 Сейчас в теме
Пытался использовать ваш код для загрузки - если запускаю не с флешки то пишет
Bridge_GetStruct метод обьекта не обнаружен

а если с флешки то


Desktop.LoadComponentFromURL метод объекта не обнаружен
??????????????
43. dismoitout 20 28.05.15 12:12 Сейчас в теме
Вернее есл загржаемый в обработке файл (эксель размещен на флешке или на раб столе или в корне диска цэ)
51. Miket78 14 26.10.15 22:00 Сейчас в теме
Вопрос к знатокам по теме статьи: как из 1с подключиться к открытому в OpenOffice Calc документу.
Для Excel есть код:
Ексель = ПолучитьCOMОбъект(, "Excel.Application");
АктивнаяСтраница = Ексель.ActiveSheet;
ТекстЯчейки=Врег(СокрЛП(АктивнаяСтраница.Cells(НомерСтрокиЕксель,НомерКолонкиЕксель).text));

Отлично работает. А как повторить такое для OO? Нужно именно прочитать активный открытый документ, а не открывать по имени файла новый сеанс.
52. umka2008 21 26.11.17 14:08 Сейчас в теме
СПАСИБО АВТОРУ!!! Долго искал и нашел ваше решение - быстро читает, окон лишних не открывает - красота )))
53. ikg_777 12.12.17 09:09 Сейчас в теме
Подскажите пожалуйста, при выгрузке в эксель можно установить автофильтры на колонки Лист.Cells.Range("A1:E1").AutoFilter ();. Как сделать аналогичное при выгрузке в OpenOffice?
54. natali_gasparian 12.02.18 00:43 Сейчас в теме
Доброго вечера! Автору огромное спасибо! Съэкономил время!!! СПАСИБО!!!!
55. user690478_ikustow 25.02.18 22:57 Сейчас в теме
Добрый вечер! Спасибо за статью, написал обработку все работает, но два момента вызвали вопрос, может кто подскажет
1. Файл в формате xls открывает без проблем, но вот xlsx уже выводит ошибку
2. программно заполняю файл в коде следующая строка
Лист.getCellByPosition(Колонка+19,Строка).setString(СтрТЧ.Перерасчет);
Нужен денежный формат, я так понимаю нужно в SetString значение Value устанавливать нужное?
57. tmixsam 55 27.05.20 08:32 Сейчас в теме
Нашла как из 1С в OpenOffice в файле вставить разрыв по строке
 //Установим разделители страниц, 
			//в списке разделителей номера строк, перед которыми ставим разделитель
			Если спРазделителей <> Неопределено Тогда
				
				Арг3 = Новый COMSafeArray("VT_VARIANT",1);
				Свойства4 = СервисМанагер.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
				Свойства4.Name = "ToPoint";
				Свойства4.Value = "A5";
				Арг3.SetValue(0, Свойства4);

				Диспатчер = СервисМанагер.createInstance("com.sun.star.frame.DispatchHelper");				
				
				oCtrl = Документ.CurrentController;
				oCtrl.setActiveSheet(ЛистДанные);
				oFrame = oCtrl.Frame;

				Для каждого ЭлемРазд Из спРазделителей Цикл
				    НомРазд = ЭлемРазд.Значение;
					//ТекЯчейка = ЛистДанные.GetCellbyPosition(1,НомРазд);
					//ТекКурсор = ЛистДанные.createCursorByRange(ТекЯчейка);
					Попытка
						АдресЯчейки = "A"+СокрЛП(НомРазд+1);
						АдресЯчейки = СтрЗаменить(АдресЯчейки," ","");
						Свойства4.Value = АдресЯчейки;
						Арг3.SetValue(0, Свойства4);
						
						//ВСТАВИТЬ на ЛистДанные РАЗРЫВ СТРОКИ перед строкой с номером НомРазд+1?
						Диспатчер.executeDispatch(oFrame,  ".uno:GoToCell", "", 0, Арг3);
						Диспатчер.executeDispatch(oFrame, ".uno:InsertRowBreak", "", 0, Арг3);
						
					Исключение
						Сообщить("Не удалось установить разрывы страниц в файле: "+ПутьКФайлу);
					КонецПопытки;
				КонецЦикла; 
			КонецЕсли;
Показать
Оставьте свое сообщение

См. также

Копирование числовых ячеек из 1С в Excel Промо

Загрузка и выгрузка в Excel Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

15.01.2019    41576    itriot11    27    

Чтение книги Exсel по листам

Загрузка и выгрузка в Excel Платформа 1С v8.3 Россия Бесплатно (free)

Речь пойдет о чтении xls файлов штатными средствами 1С постранично, возможно, для Вас это не будет новым способом, но может послужить как стимулом копаться в коде, так и быстрым решением проблемы загрузки для кого-то.

23.11.2022    351    ix5s    0    

Создание обработки для выгрузки в Excel, PDF, Docx, TXT (управляемые формы)

Загрузка и выгрузка в Excel Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В помощь начинающим программистам. Создание простой обработки для выгрузки табличного документа в файлы различных форматов, на примере справочника Контрагенты (релиз платформы 1С:Предприятие 8.3 (8.3.20.1674), самописная конфигурация).

18.07.2022    1517    Pproksima    6    

Выгрузка данных в Excel с добавлением формул (нюансы формирования формул)

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Итак, я здесь описываю выгрузку отчета в Excel с добавлением пустых колонок для заполнения внутри самого Excel + колонки с формулами для выполнения расчетов на базе выгруженного и введенного руками в Excel. На самом деле публикация появилась по причине моих проблем, возникших при написании формул. Все остальное вроде штатно, но вдруг кому пригодится.

30.05.2022    1643    Zlohobbit    4    

Excel vs 1С: битва с неожиданным исходом Промо

Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    45071    bolefirenko    123    

Выгрузка / Загрузка регистра сведений из внешней системы с большим количеством строк

Загрузка и выгрузка в Excel Платформа 1С v8.3 Бесплатно (free)

Часто возникает задача, когда уже вся НСИ загружена и необходимо перегрузить регистры сведений с большим количеством строк (около миллиона строк). Перегрузка может быть из любой информационной системы (на 1С или нет). Для себя определил максимальной быстрый вариант выгрузки/загрузки - через файл Excel с учетом возможности предварительной правки и просмотра результата загрузки.

28.01.2022    2163    Shining_ninja    4    

Делаем формат ячейки дата в Excel без Excel

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Задача отправлять печатную форму в формате Excel, но у этой печатной формы должен быть правильный формат ячеек с датой

26.03.2021    5144    John_d    23    

Генерация кода с помощью формул Excel

Загрузка и выгрузка в Excel Платформа 1С v8.3 Бесплатно (free)

В работе периодически возникает необходимость создания однотипных строк кода, отличающихся, в общем случае, только неким известным заранее строковым содержимым. При помощи конкатенации в Excel подобные данные легко превратить в готовые строки кода.

27.10.2020    1446    aleksei_adamov    6    

Из Excel в 1С запросом Промо

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

... ну, конечно, не прям так типовым языком запросов, а расширенным языком запросов. Речь пойдет о том, как "залить" данные в таблицы 1С и не пилить при этом бесконечного количества наколеночных обработок.

14.08.2018    23080    m-rv    5    

Удаление из файла эксель ненужных страниц средствами 1С без COM и через COM

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Как средствами 1С из файла эксель удалить ненужные листы без COM и с ним. Я разрабатывал на платформе 1С:Предприятие 8.3 (8.3.14.1694)

28.01.2020    4240    pavel_pss    12    

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Устали переключаться с русского на английский и обратно при работе с таблицами Excel из 1С? Сборка наиболее необходимых функций и методов работы с Excel, обернутых в функции 1С на русском языке.

24.10.2019    8693    DmitryKotov    6    

Выгрузка из 1С номенклатуры со штрихкодами без программирования

Загрузка и выгрузка в Excel Внешние источники данных Платформа 1С v8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Я так и не смог найти простой инструкции или обработки, чтобы выгрузить из 1С: Управление торговлей 11 номенклатуру вместе со штрихкодами, поэтому решил написать собственную инструкцию.

28.08.2019    34639    user1114182    14    

Загрузка из EXCEL в 1С на платформе 8.3.6/8.3.7/8.3.8/8.3.9/8.3.10 (с картинками) Промо

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Импорт содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в таблицу значений.

06.04.2015    286671    StepByStep    76    

Загрузка картинок в справочники (Универсальная загрузка из табличного документа)

Обработка справочников Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример загрузки картинок в справочник Номенклатура (с помощью обработки универсальная загрузка данных из табличного документа). Проверялось на конфигурации УТ 11.4.7.

28.05.2019    12270    Rasdag    6    

Повторение строк заголовка на каждой странице при обработке файлов Excel средствами платформы 1С:Предприятие

Загрузка и выгрузка в Excel Платформа 1С v8.3 Россия Бесплатно (free)

Вопросы повторения строк на каждой странице при работе с файлом Excel из программы, работающей в системе 1С.

23.01.2019    7605    senshkr    3    

Загрузка из EXCEL в 1С. Чтение файла XLSX средствами 1С. ПостроительDOM Промо

Универсальные обработки Загрузка и выгрузка в Excel Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

ПРАКТИЧЕСКОЕ ПОСОБИЕ РАЗРАБОТЧИКА: Метод "NativeXLSX" (ПостроительDOM). Обрабатываются данные EXCEL типов: "Строка", "Число", "Дата" ("Время"), "Булево", "Процент", а также изображения.

11.09.2014    84456    StepByStep    27    

Запись одной книги Excel на нескольких листах средствами 1С (без внешних компонент)

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пользователи часто просят сохранить им стопиццот отчетов в один файл Excel, чтобы отчеты были в одном файле. Ну или клиент хочет счет, накладную и счет-фактуру получить в одном документе. 1С умеет это делать без всяких там COM-объектов. Давайте разберемся, куда нажимать и что крутить.

14.01.2019    34453    starik-2005    46    

Как легко загружать данные из электронных таблиц (Excel, OpenOffice и т.д)

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Как легко загружать данные из электронных таблиц (Excel, OpenOffice и т.д). На примере загрузки в табличную часть документа Поступление товаров и услуг в УТ 11.4.

09.01.2019    18270    Rasdag    16    

Работа с Excel через COM

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Несколько примеров работы с excel (ms office 2010, в моем случае) через COM.

01.10.2018    16449    jaroslav.h    0    

Загрузка из EXCEL в 1С. MS ADODB.Connection Промо

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

ПРАКТИЧЕСКОЕ ПОСОБИЕ РАЗРАБОТЧИКА: Метод "MS ADODB" (ADODB.Connection). Поддерживаемые типы: *.xls,*.xlsx.

30.11.2012    170346    StepByStep    91    

Выгрузка в Excel с использованием формата OpenXML, разбор файла sheet1.xml

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Судя по количеству просмотров темы https://infostart.ru/public/900022/ решил описать структуру файла Листа excel. На полноту не претендую, опишу то, что знаю.

21.09.2018    9572    user1045404    2    

Excel: создание в формате xlsx без COM технологии

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

По работе приходится часто выгружать данные в Excel формате. При большом количестве строк и формул этот процесс достаточно длительный. Решил написать для своих целей небольшую библиотечку для выгрузки данных. Используется технология open-xml. Никаких библиотек не надо, пишу напрямую в xml файлики. На данном этапе сделано форматирование, формулы.

10.09.2018    14191    user1045404    19    

Маркировка ячеек цветом. Отладка загрузки данных из эксель.

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

После 100-ой кривой загрузки родился способ, как отладить алгоритм.

05.07.2018    10507    RustIG    7    

СТАБИЛЬНАЯ Загрузка справочника номенклатуры в 1С:Управление торговлей 8 из прайс-листа в Excel (код открыт скачать можно бесплатно) Промо

Обмен между базами 1C Загрузка и выгрузка в Excel Платформа 1С v8.3 1С:Управление торговлей 10 Россия Бесплатно (free)

В таких случаях многие заказывают соответствующие обработки у собственных штатных программистов, фирм-франчайзи или сторонних разработчиков, но это дополнительные расходы и время. Как быть, если по различным причинам такой возможности нет? У каждого пользователя профессиональной версии 1С:Предприятие 8 подобная обработка уже есть! На диске ИТС! Типовая обработка «ЗагрузкаДанныхИзТабличногоДокумента.epf», находиться в разделе «Технологическая поддержка» > «Методическая поддержка 1С:Предприятие 8» > «Универсальные отчеты и обработки» > «Загрузка данных из табличного документа». Обратите внимание, начиная с Февраля 2010 г. на диске ИТС данная обработка для конфигураций на платформе 8.1 находится в другом разделе: «Технологическая поддержка» > «Методическая поддержка 1С:Предприятие 8» > «Платформа 1С:Предприятие 8.1» > «Универсальные отчеты и обработки» > «Загрузка данных из табличного документа».

07.11.2011    193148    SkyLink2012    133    

Загрузка из Excel в управляемом приложении

Загрузка и выгрузка в Excel Управляемые формы Бесплатно (free)

С появлением управляемого интерфейса стали актуальными вопросы в давно освоенных приемах работы. В частности, загрузка из файла.

30.11.2017    47569    alex_bitti    17    

Функция сохранения картинок из книги Excel в каталог с определением координат на листе

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Разбор файла *.xlsx как Web-архива, выгрузка изображений без потери качества, с определением положения изображений.

12.11.2017    12105    user634820_zergemoth    1    

Работа с Excel

Загрузка и выгрузка в Excel Платформа 1С v8.3 Бесплатно (free)

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

23.10.2017    72211    arakelyan    43    

Как программисту быстро загрузить данные из Excel Промо

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Встала как-то разовая задача - загрузить данные из Excel в базу... Идея не новая, на ИС имеются уже готовые подобные разработки, но предлагается сделать самостоятельно. Пригодится в будущем.

26.10.2011    26340    DrAku1a    53    

Невалидный XLSX при сохранении Табличного документа

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Ошибка открытия XLSX файлов, созданных при сохранении Табличного документа. (Невалидный формат файла)

21.10.2017    17368    saddy    3    

Почему при загрузке таблицы Excel в 1С возникают ошибки?

Загрузка и выгрузка в Excel Платформа 1С v8.3 Бесплатно (free)

При загрузке из EXCEL в 1С методом MS ADODB.Connection столкнулся с некоторыми проблемами, которые попытался устранить в ниже приведенной статье. Надеюсь, что статья поможет вам сократить время разработки.  Особая благодарность Андрею М. за публикацию //infostart.ru/public/163640/

28.04.2017    20177    dakork    4    

Загрузка значений свойств номенклатуры в Альфа-Авто с использованием обработки загрузки данных из табличного документа

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Россия Управленческий учет Бесплатно (free)

В публикации будет рассмотрено использование встроенной в отраслевую конфигурацию Альфа-Авто обработки по загрузке данных из табличного документа для заполнения значений дополнительных свойств номенклатуры.

13.10.2016    19350    miavolas    16    

Решение проблемы медленной загрузки из файла Excel, защищенного паролем

Загрузка и выгрузка в Excel Платформа 1С v8.3 Россия Бесплатно (free)

Столкнулся с проблемой загрузки из файла Excel. Загрузка занимала около получаса и не всегда заканчивалась успешно. Решение проблемы изложу в данной статье.

27.09.2016    11609    HAMMER_59    4    

Быстрая выгрузка больших плоских отчетов в Excel

Загрузка и выгрузка в Excel Платформа 1С v8.3 Бесплатно (free)

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

29.11.2015    19881    matveev.andrey.v    17    

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм

Загрузка и выгрузка в Excel Математика и алгоритмы Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    18244    etmarket    14    

Выгрузка таблицы значений в Excel

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Примитивно, грубо, без дизайна, но очень быстро.

28.06.2015    34929    Yashazz    31    

Скорость закачки с EXCEL при работе с большими файлами

HighLoad оптимизация Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Поставлена задача уменьшить время загрузки данных с EXCEL. Пока ждал ответа от разработчиков ядра, сам начал копать всё, что угодно. ЗАДАЧА решена, с чем спешу поделиться.

09.06.2015    18986    ybatiaev    33    

Чтение из Эксель-файла

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Некоторые выдержки из моих наработок, связанных с работой 1С и приложений майкрософт-оффис

26.05.2015    12047    mack198109    7    

Вывод таблицы значений в Excel

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Изложена методика вывода таблицы значений в Excel с помощью именованных ячеек.

21.01.2015    16728    scientes    6    

Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним

Загрузка и выгрузка в Excel Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Бесплатно (free)

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл. Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

16.01.2015    106232    shmellevich    40    

Простой способ программного сохранения больших отчетов из СКД в формат Excel

Универсальные функции Загрузка и выгрузка в Excel Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Перерыв весь интернет не смог найти простого способа сохранить отчет с большим числом строк в формате Excel. Везде предлагалось писать процедуры построчной записи, ADO, COMSafeArray и прочее. Метод же, используемый во всех найденный публикациях "Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)", не работает при большом числе строк. Публикация http://infostart.ru/public/77128/ натолкнула на простую идею, которую и реализовал.

07.08.2014    36079    den_valley    15    

Преобразование Универсального отчета в сводную таблицу Excel.

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Тем, кто часто пользуется сводной таблицей Excel, неудобно использовать формат, который получается на выходе универсального отчета. т.к. Универсальный отчет строится с группировками, а данные для сводной таблицы нужны в плоском виде.

16.06.2014    18756    Mos    4    

Сохранение в Excel из WEB-клиента

Загрузка и выгрузка в Excel Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Не всегда корректно отрабатывает сохранение в Excel из 1C при работе в WEB-клиенте. Мне попалась ситуация, когда не отрабатывал код "ТабличныйДокумент.Записать(...)" и выдавалась ошибка "неизвестная ошибка.: object doesn't support this property or method" Ниже предложена процедура сохранения в Excel, корректно работающая во всех типах подключения.

24.04.2014    22866    Tavalik    1