Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > 1С: Проблемы и решения > Есть ли в 1С выгрузка таблицы в Excel?


Автор: igosm 18.08.04, 09:50
Есть ли спец функции? Скажем, обращение к ячейкам? :huh:

Автор: DrMort 18.08.04, 10:37
Это всё делается через OLE. Данный вопрос многократно обсуждался, воспользуйся для начала поиском, а там уж если что непонятно спрашивай. :)

Автор: ZEE 18.08.04, 13:57
igosm, вот например выдернул кусок кода из одного документа - смотри разбирайся:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    А = СоздатьОбъект("Excel.Application");
    КвоЛистов = А.Worksheets.Count;
    Для Индекс = 1 По КвоЛистов Цикл
        спЛистов.ДобавитьЗначение(А.Worksheets(Индекс).Name);
    КонецЦикла;
    листНакладной = 0;
    Если спЛистов.ВыбратьЗначение(,"Выберите лист",листНакладной,) < 1 Тогда
        Возврат;
    КонецЕсли;
    Результат = А.Worksheets(листНакладной).Activate;
    ИспДиапазон = А.Worksheets(листНакладной).UsedRange;
       СтрНач = ИспДиапазон.Row; СтрКон = ИспДиапазон.Rows.Count;
       СтлНач = ИспДиапазон.Column; СтлКон = ИспДиапазон.Columns.Count;
     
    НачСтрока = 0;
    Если ВвестиЧисло(НачСтрока,"Строка начала табличной части накладной",,0,0) = 0 тогда
        Возврат;
    КонецЕсли;
    КонСтрока = 0;
    Если ВвестиЧисло(КонСтрока,"Строка конца табличной части накладной",,0,0) = 0 тогда
        Возврат;
    КонецЕсли;
    столбецКод = 0;
    Если ВвестиЧисло(столбецКод,"Колонка кода изделия",,0,0) = 0 тогда
        Возврат;
    КонецЕсли;
    столбецНаименован = 0;
    Если ВвестиЧисло(столбецНаименован,"Колонка наименования изделия",,0,0) = 0 тогда
        Возврат;
    КонецЕсли;
    столбецКолво = 0;
    Если ВвестиЧисло(столбецКолво,"Колонка количества",,0,0) = 0 тогда
        Возврат;
    КонецЕсли;
    столбецСумма = 0;
    Если ВвестиЧисло(столбецСумма,"Колонка суммы",,0,0) = 0 тогда
        Возврат;
    КонецЕсли;
     
    Для Индекс = НачСтрока По КонСтрока Цикл
        Состояние("Анализ строк накладной - " + Индекс + "/" + СтрКон);
        Если СокрЛП(Строка(А.Worksheets(листНакладной).Cells(Индекс, столбецКод).Value+А.Worksheets(листНакладной).Cells(Индекс, столбецНаименован).Value)) = "" Тогда
            Продолжить;
        КонецЕсли;
    // ...
        Цена = А.Worksheets(листНакладной).Cells(Индекс, СтолбецСумма).Value;
        Кво = А.Worksheets(листНакладной).Cells(Индекс, СтолбецКолво).Value;
    // ...
    // тут что-то делаем с данными
    // ...
    КонецЦикла;

Автор: Darksquall 19.08.04, 11:21
Доступ к ячейке активного листа в Excel

Excel=СоздатьОбъект("Excel.Application");

w1=Excel.Cells(Ячейка,Столбец);
Знач=w1.Value; // Знач-значение ячейки

Автор: Outlander 23.08.04, 09:32
есть еще 1 спрособ. можно просто сохранить уже сформированную страницу в xls то есть
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    ...
    table.write(some.xls,1)
    excel = createobject("Excel.Application");
    excel.open("some.xls");
    ;

а дальше в excele работаем через VBA

Автор: Sphinx2001 24.08.04, 00:59
Есть еще способ, но более извращенный. Экселевский файл сохраняещь как дбф, а потом работаешь с ним через объект XBase
Что то типа этого:
Спр = СоздатьОбъект("Справочник.Какойнибудь");
// будем грузить например в справочник
ДБ = СоздатьОбъект("XBase");
ДБ.ОкткрытьФайл("exel.dbf");
кс = ДБ.КоличествоЗаписей();
Для А = 1 По Кс Цикл
ДБ.Перейти(А);
Спр.Новый();
Спр.Наименование = ДБ.Name;
Спр.Цена = ДБ.Price;
Спр.Записать();
КонецЦикла;
ДБ.ЗакрытьФайл();

Маленькое замечение. Если будешь сохранять xls таблицу в дбф, то первая строка у тебя должна будет содержать наименование полей (name,price и тд.)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)