• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

1c в Xls

  • Автор темы Leon3
  • Дата начала
L

Leon3

Помогите пожалуйста! Как сделать програмно Запись в нужную ячейку документа xls?( Запись Любую)
 
L

LSH

Вот простой пример циклического заполнения строк:
ЭКС=СоздатьОбъект("Excel.Application");
ЭКС.Workbooks.Add(); //Добавим новую книгу
ЭКС.Visible=1; //Ыксель видимым. Можно не делать, тогда будет висеть процесс в памяти.
Стр=1; //первая строка
Для а = 1 По Что_то_там Цикл
ЭКС.Cells(Стр,1).Value="Какой-нибудь текст или число"; //записали значение в 1 строку 1 столбец
ЭКС.Cells(Стр,2).Value="Еще какая-нибудь фигня"; //записали значение в 1 строку 2 столбец
//...и т.д.
Стр=Стр+1;//переходим на следующую строку
КонецЦикла;
 
J

jcnby

Ну открыть приложение всегда нада, конечно правильней ето делать через попытку (вообще все приложения нужно открывать через попытку)
Код:
Попытка
Excel=СоздатьОбъект("Excel.Application");
исключение 
Сообщить("не удалось соедениться с Ехель");
Возврат;
КонецПопытки;

Такс - получаем значение из нужной ячейки:
Код:
Значение=Excel.WorkBooks(1).WorkSheets("Лист3").Cells(номерстроки,номерколонки).Value;
- в данном случае - первая открытая книга. WorkBooks(1)
- Лист "Лист3" - название нужного листка
-НомерСтроки, НомерКолонки - числа местоположения ячейки в Ехэле.

Незабыть перед этим:
Либо создать Новый Либо открыть.
открыли:
Код:
Excel.WorkBooks.Open(ИмяФайла);
создали:
Код:
Excel.Application.WorkBooks.add(1);

и обязательно в конце:
Код:
Excel.WorkBooks(1).Close(ИмяФайла);
Excel.Quit();

Нащет Видимости - решайте сами- можно открывать - можно не открывать)
Код:
 Excel.Visible=1; либо просто не писать;

Внесли значение в ячейку:
Код:
Excel.ActiveSheet.Cells(НомерСтрок,НомерКолонки).Value=СокрЛп("Наименование");
Excel.ActiveSheet.Cells(НомерСтрок,НомерКолонки).Value=СокрЛп("Сумма");

если интерестно - выложу и по оформлению ячеек ( высота, ширина, шрыфт, цвет и т.д.)




вылаживаю - может кому понадобиться:

Делать рабочую книгу активной:
Код:
Exel.WorkBooks(2).Activate();
Exel.WorkBooks.Item(2).Activate();

Коллекция (BuiltinDocumentProperties) содержащая все свойства рабочей книги в Ехеле:
Код:
Свойство=Exel.WorkBooks.Item(1).BuiltinDocumentProperties;
Посмотрим свойства:
Код:
Для Ы=1 по Свойство.Count Цикл
Попытка
Сообщить(Свойство.Item(Ы).Name +"="+ Свойство.Item(Ы).Value);
Исключение
КонецПопытки;
КонецЦикла;
где Count -количество наших свойств, ну Name=Имя, Value=Значение.

что можем получить?? получаем:

Title - название
Subject - тема
Author - автор
Keywords - ключевые слова
Comments - комментарий
Template - используемый шаблон
Last author - последний автор
Revision number - редакция док-а
Applicftion name - имя приложения, в каторой открыт файл
Last print date - последняя дата печати
Creation date - дата создания
Last save time - последняя дата сохранения
Manager - руководитель (гггг - жестикулировщиГГГ)
Company - учреждение




Сохраняем документ:

Код:
Exel.ActiveWorkBook.Save() //- сохраняем 
Exel.ActiveWorkBook.SaveAs("C:/MyExel.xls")  //-сохранить как

Вносим в ячейку формулу:
Код:
Ячейка.Value=" =SUM(B1:B2)"

Очистим ячейку
Код:
Ячейка.ClearContents

Форматирование.
(Font, Interior)
Код:
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Interior.ColorIndex=1;	//1= белый фон
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.ColorIndex=2;  //2= черный цвет шрифта
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.Name= "Courier";  // указывает какой шрифт
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.Size=12;	 //размер шрифта
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.Bold=1; либо (0); //т.е. истина либо лож - ?(обычный, жирный)
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).InsertIndent(2); //устанавливаем отступ (в данном случае на 2 символа)
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).ColumnWidth= 10;  // ширина колонки
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Borders(5).LineStyle = -4142;  //очищаем все границы
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Borders(7).LineStyle=1;  //длбавили левую границу (7 - левая, 8 - верхняя, Exel.WorkBooks(1).WorkSheets(1).Cells(1,1)9 - нижняя, 10 - правая ))
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).VerticalAlignment = -4160; //выравнивание по левому краю
Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).WrapText=1 (истина)  //устанавливаем перенос слов

Всего 56 цветов:
1- белый
2-черный
3-красный
5-синий
6-желтый
7-лиловый
10-зеленый
33-голубой
39-сиреневый
46-оранжевый


адрес ячейки:
Код:
.Address

Прямоугольная область ячеек:
Код:
Exel.WorkBooks(1).WorkSheets(2).Range("a1:b2");
Exel.WorkBooks(1).WorkSheets(2).Range("a1:b2").Copy();
Exel.WorkBooks(1).WorkSheets(2).Range("a11:b12").Select();
Exel.WorkBooks(1).WorkSheets(2).Paste();

Надеюсь копи-паст вам понятен. Select - выделяет диапазон - куда копируются данные
Важно: с помощью Range выделять и редактировать необходимый блоки!


Если найду что-небудь еще- выложу.
 
J

jcnby

Про Диаграммы:

Два варианта: 1-й если Диаграмма будет распологаться непосредственно на листе с данными, 2-й на отдельном листе.

Если Диаграмма распологается на листе с данными:
в скобках параметры определения левого верхнего угла и размеры.
Код:
Chart = Excel.WorkBooks(1).WorkSheets(2).ChartObjects.Add(,,,);

Если все же на отдельном листе, то добавим Sheets наш элемент: *(СОДЕРЖИТ ЛИСТЫ ВСЕХ ТИПОВ)*

Код:
Excel.WorkBooks(1).Sheets.Add(,,1,-4109);
где:Add(ПЕРВЫЙ,ВТОРОЙ,1,-4109);
ПЕРВЫЙ- номер листа, перед которым будет НАШ лист;
ВТОРОЙ-номер листа, после которого будет НАШ лист;
1- количество создоваемых листов;
-4109 - рабочий лист ( -4109 = с диаграммой, -4167 = лист с данными)

продолжение следует...
 
J

jcnby

:) Диаграмма снимается...есть в 1сДиаграмма
 
B

bremlin

Здравствуйте.
Помогите, пожалуйста, решить проблему с экспортом данных из таблицы документа в текстовый файл. В общем надо определенные столбцы, записать в тектовик в определенном порядке. Написал небольшой код, проблема в том, что в текстовике выходит мой текст:
"КоличествоЦена
КоличествоЦена"
Если убрать кавычки, то Количество и Сумма суммируются, а еще нужно добавить ";" между ними, но при "Количество +";"+Цена", 1С все равно суммирует и плевать он хотел на ";" :(

P.S. Извините конечно что немного не в ту тему написал, но при создании новой темы из IE вылетает почему-то.

Код:

Процедура Запись()
Т = СоздатьОбъект("Текст");
Т.Открыть("c:\install\text.txt");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Т.ДобавитьСтроку("Количество" + "Цена");
Предупреждение("Строка Добавлена");
Т.Записать("c:\install\text.txt");
КонецЦикла;
Т.Записать("c:\install\text.txt");
КонецПроцедуры //Запись

Вообще нужно будет добавить в ЗиК кнопочку, чтоб автоматом кидалось в текстовик данные для перечисления зп через банк:
Номер Карты;Сумма;ФИО
Номер Карты;Сумма;ФИО
и т.д.
 
K

kaa

Процедура Запись()
Т = СоздатьОбъект("Текст");
Т.Открыть("c:\install\text.txt");
Строк = "Количество;Цена"
Т.ДобавитьСтроку(Строк);
//предполоджим из документа
ВыбратьСтроки();
Пока ПОлучитьСтроку()=1 Цикл
Строк = Строка(Количество)+";"+Строка(Цена);
Т.ДобавитьСтроку(Строк);
КонецЦикла;

Т.Записать("c:\install\text.txt");
КонецПроцедуры //Запись

Где-то так
 
B

bremlin

kaa
Большое и лохматое тебе Спасибо :( Выручил!
 
B

bremlin

Еще небольшая кучка вопросиков.

Скажем, если я хочу чтоб имя файла было динамичным, и в него записывались дата и еще что-нибудь. Можете привести пример как в этом случае связать переменную с именем файла?
"ИНН(переменная)_Всякиеразныепеременные_Дата.txt"

Заранее спасибо!
 
V

vbs

Например, так :
ФайлЭкспорта = "C:\ИмяКаталога"+"\"+String(РабочаяДата())+".txt";
Т = СоздатьОбъект("Текст");
Т.Открыть(ФайлЭкспорта);
 
B

bremlin

"Не лает, не кусает - значит сдохла" Не ругается, но ничего и не сохраняет.
ФайлЭкспорта = "C:\install"+"\"+String(РабочаяДата())+".txt";
//ФайлЭкспорта = "C:\install" + "\" + ДатаЧисло(ДатаДок) + ДатаМесяц(ДатаДок) + ДатаГод(ДатаДок) + НомерДок + ".txt";
Т = СоздатьОбъект("Текст");
Т.Открыть("ФайлЭкспорта");
...
Т.Записать("ФайлЭкспорта");
КонецПроцедуры //Запись
 
V

vbs

Кавычки-то для драматического эффекта добавил ?

Т.Открыть("ФайлЭкспорта");
...
Т.Записать("ФайлЭкспорта");


можно было и оставить

T.Открыть(ФайлЭкспорта);
ФайлЭкспорта - это переменная, а "ФайлЭкспорта" - текстовая строка
 
B

bremlin

Спасибо большое:) За просвещение по поводу переменных!
С кавычками красивше и выделяется)
 
N

NikO

Про Диаграммы:

Два варианта: 1-й если Диаграмма будет распологаться непосредственно на листе с данными, 2-й на отдельном листе.

Если Диаграмма распологается на листе с данными:
в скобках параметры определения левого верхнего угла и размеры.
Код:
Chart = Excel.WorkBooks(1).WorkSheets(2).ChartObjects.Add(,,,);

Всем добрый вечер.

Данная строчка кода работает превосходно. Объект-диаграмма
добавляется на страницу. А как же дальше быть?
Как указать тип диаграммы, источник данных для диаграммы?
Перепробовал кучу вариантов.
Помогите кто знает как решить этот вопрос.
Всем спасибо.
 
B

bremlin

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

vbs

Примерно так можно записать в нужную колонку определенного листа существующего файла какие-то данные

ExcelApp = CreateObject("Excel.Application");
WorkBooks = ExcelApp.WorkBooks;
WorkBook = WorkBooks.Open(FileName); //FileName - имя файла Excel
//NL - название листа
WorkBook.Sheets(TrimAll(NL)).Activate();
Лист = WorkBook.WorkSheets(TrimAll(NL));
//First - начальный элемент цикла, Last - конечный
for k = First to Last do
YCell = ExcelApp.Cells(k,НомерКолонкиExcel);
YCell.Value = Данные; //Данные - то, что нужно записать
enddo;
ExcelApp.ActiveWorkbook.Close();
ExcelApp.Quit()
 
B

bremlin

Здрасте. Спасибо за пример экспорта в Excel. Появились некоторое пробелемы с вытаскиванием значений.

В общем. Нужно вытащить из 1С данные по оплате домофона. Существует специальный отчет, при его формировании выдает:
№кв | блаблабла | блаблабла | оплачено | конечный остаток

И в общем-то вытаскиваю как, захожу в конфигуратор этой формы, смотрю какое значение выдается в этой ячейке и пишу его в код выгрузки, что-то вроде:
Процедура Excel()
ЖКХ=СоздатьОбъект("Справочник.ЖКХ");
ЖКХ.ИспользоватьРодителя(ВыбСубконто3);
ЖКХ.ПорядокКодов();
ЖКХ.ВыбратьЭлементы();
-=-=-=-=-=-=-открытие екселя-=-=-=-=-=-=-
Пока ЖКХ.ПолучитьЭлемент()=1 Цикл
Ка=Ка+1;
YCell = ExcelApp.Cells(Ка,1);
YCell.Value = "Квартира №" + ЖКХ.Наименование;

Тут все здорово, вытаскивает как надо.
А вот теперь надо вытащить оплачнную сумму...в таблице она описана как выражение Ит.КорКО()#Ч014.2., вот так, 1 в 1.
Также надо прописывать Ит = СоздатьОбъект("БухгалтерскиеИтоги"); и прочее, но 1С в упор не понимает такую переменную с # в середине.
С конечной суммой дело обстоит не лучше...ПечСКД#Ч014.2.,
Кто может подсказать как это дело решить?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!