powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBS, форматирование ячеек Excel
19 сообщений из 19, страница 1 из 1
VBS, форматирование ячеек Excel
    #39343484
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!

Нужна Ваша помощь, коллеги.

Работаю в БК (БОСС-кадровик), работа над формированием отчета, как я понял - на vbs. Сильно не пинайте, раньше никогда с БК не работал.

На текущий момент имеется следующий код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
local Query_ as string; 

 ADODB.Connection as AutoCon; 
 ADODB.Recordset as AutoSet; 
 AutoCon.Open('@@xUtil{dsq}'); 
 AutoSet.CursorLocation = 2; 

 CON Формирование справочника причин к видам оплат...; 

let Query_='текст_примитивного_запроса_select'; 

 AutoSet.Open(:Query_, :AutoCon, 3, 1, 1); 

 execute xOCX {Excel.Application as Excel}; 

 local vb.Record=&AutoSet; 
 local vb.Excel=&Excel; 

 vb 
 {
 Excel.ScreenUpdating = 0 
 Excel.EnableEvents = 0 
 Dim WorkBook

 Set WorkBook=Excel.Workbooks.Add() 

 WorkBook.Worksheets(1).Cells.WrapText = True
 WorkBook.Worksheets(1).Cells.Font.Name = "Times New Roman"
 WorkBook.Worksheets(1).Cells.Font.Size = 10
 WorkBook.Worksheets(1).Rows(1).Font.Bold = 1
 WorkBook.Worksheets(1).Range("A1:E1").Interior.ColorIndex = 6
 WorkBook.Worksheets(1).Range("A1:E1").Borders.LineStyle = -4118

 WorkBook.Worksheets(1).Columns(1).ColumnWidth = 8.43 
 WorkBook.Worksheets(1).Columns(2).ColumnWidth = 10.14
 WorkBook.Worksheets(1).Columns(3).ColumnWidth = 29.14 
 WorkBook.Worksheets(1).Columns(4).ColumnWidth = 10.29
 WorkBook.Worksheets(1).Columns(5).ColumnWidth = 58.86 

 WorkBook.Worksheets(1).Cells(1,1) = "название_столбца_1"
 WorkBook.Worksheets(1).Cells(1,2) = "название_столбца_2"
 WorkBook.Worksheets(1).Cells(1,3) = "название_столбца_3"
 WorkBook.Worksheets(1).Cells(1,4) = "название_столбца_4"
 WorkBook.Worksheets(1).Cells(1,5) = "название_столбца_5"
 
 WorkBook.Worksheets(1).Cells(2,1).CopyFromRecordset Record

 WorkBook.Worksheets(1).Rows.AutoFit
 WorkBook.Worksheets(1).Columns.VerticalAlignment = -4108 
 WorkBook.Worksheets(1).Columns(1).HorizontalAlignment = -4108
 WorkBook.Worksheets(1).Columns(2).HorizontalAlignment = -4131
 WorkBook.Worksheets(1).Columns(3).HorizontalAlignment = -4131
 WorkBook.Worksheets(1).Columns(4).HorizontalAlignment = -4108
 WorkBook.Worksheets(1).Columns(5).HorizontalAlignment = -4131
 WorkBook.Worksheets(1).Rows(1).VerticalAlignment = -4108 
 WorkBook.Worksheets(1).Rows(1).HorizontalAlignment = -4108

 Excel.ScreenUpdating = 1 
 Excel.EnableEvents = 1 
 }; 

 AutoSet.Close; 

 CON; 


 execute xOCX{ 
 Excel.Visible=True; 
 }; 

 execute xOcxFree(AutoSet); 
 execute xOcxFree(Excel); 
 execute xOcxFree(AutoCon); 



В итоге я получаю excel-файл, который сразу открывается и заполнен данными, которые получает запрос. Заполняю начиная со второй строки (первая строка нечто вроде шапки).

Получаю в итоге что-то вроде такой таблицы в excel:

шапка шапка шапка шапка шапка
11111 11111 11111 ааааа ааааа
11111 11111 11111 ааааа ааааа
22222 22222 22222 ааааа ааааа
22222 22222 22222 ааааа ааааа
22222 22222 22222 ааааа ааааа
33333 33333 33333 ааааа ааааа
33333 33333 33333 ааааа ааааа

Нужно ее переформатировать вот в такой вид:
шапка шапка шапка шапка шапка
11111 11111 11111 ааааа ааааа
ааааа ааааа
22222 22222 22222 ааааа ааааа
ааааа ааааа
ааааа ааааа
33333 33333 33333 ааааа ааааа
ааааа ааааа

Т.е. если в первом, втором и третьем столбце значение совпадает с предыдущим - то ячейки 1го, 2го и 3го столбце в этой строке очистить. И так до конца документа.

Каким образом можно подобное реализовать?

Заранее благодарю за ответ.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343487
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gamadjoНужно ее переформатировать вот в такой вид:
шапка шапка шапка шапка шапка
11111 11111 11111 ааааа ааааа
ааааа ааааа
22222 22222 22222 ааааа ааааа
ааааа ааааа
ааааа ааааа
33333 33333 33333 ааааа ааааа
ааааа ааааа


Не знал, что пробелы удалятся.
Вот такой должен быть результаты:
шапка шапка шапка шапка шапка
11111 11111 11111 ааааа ааааа
_____ _____ _____ ааааа ааааа
22222 22222 22222 ааааа ааааа
_____ _____ _____ ааааа ааааа
_____ _____ _____ ааааа ааааа
33333 33333 33333 ааааа ааааа
_____ _____ _____ ааааа ааааа
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343540
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gamadjoесли в первом, втором и третьем столбце значение совпадает с предыдущим - то ячейки 1го, 2го и 3го столбце в этой строке очистить. И так до конца документа.

Каким образом можно подобное реализовать?
Ну пробегите по таблице, сравнивая, и где надо - зачищая. Будет нечто типа

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim row As Long
Dim baserow As Long

With WorkBook.Worksheets(1)
baserow=2
row=3
Do Until IsEmpty(.Cells(row,1))
  If .Cells(baserow,1)=.Cells(row,1) And .Cells(baserow,2)=.Cells(row,2) And .Cells(baserow,3)=.Cells(row,3) Then
    .Cells(row,1) = ""
    .Cells(row,2) = ""
    .Cells(row,3) = ""
  Else
    baserow = row
  End If
row = row + 1
Loop
End With
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343556
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina , Вы просто чудо! То, что нужно и это работает. Разве что пришлось убрать объявления типов данных, т.к. vbs сам справляется :)

Тогда понаглею еще чутка, не очень понимаю просто сам пока что.

Как можно теперь, обвести в рамку (просто границу сделать excelевскую) вокруг каждого "блока". Что-то вроде такого (цитата - граница):

шапка шапка шапка шапка шапка
автор11111 11111 11111 ааааа ааааа
_____ _____ _____ ааааа ааааа
автор22222 22222 22222 ааааа ааааа
_____ _____ _____ ааааа ааааа
_____ _____ _____ ааааа ааааа
автор33333 33333 33333 ааааа ааааа
_____ _____ _____ ааааа ааааа
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343560
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И изначально, всю таблицу "обвести", сколько бы там ни было строк - до конца, включая "шапку".
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343607
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно наверное вот такого?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Dim row As Long
Dim baserow As Long

With WorkBook.Worksheets(1)
baserow=2
row=3


Do Until IsEmpty(.Cells(row,1))
  If .Cells(baserow,1)=.Cells(row,1) And .Cells(baserow,2)=.Cells(row,2) And .Cells(baserow,3)=.Cells(row,3) Then
    .Cells(row,1) = ""
    .Cells(row,2) = ""
    .Cells(row,3) = ""
  Else
    DIM r as Range
    r=.Range("A" & baserow & ":H" & row)

    With r.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    With r.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    With r.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    With r.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    
    baserow = row
  End If
row = row + 1
Loop
End With


[/quot]
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343613
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл впихнуть под кат. Простите.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343628
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gamadjoпришлось убрать объявления типов данных, т.к. vbs сам справляется
Лучше определить явно. А то VBS запросто может определить переменные как Integer, и если строк окажется дофига, получишь Overflow.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343631
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снова ругается на типы, я убрал. Первые два - никаких проблем. С третьим, r as range проблемы были. Переписал таким образом (просто подставил) - не работает. Ошибка "Неизвестная ошибка выполнения"

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Dim row
Dim baserow

With WorkBook.Worksheets(1)
baserow=2
row=3

Do Until IsEmpty(.Cells(row,1))
  If .Cells(baserow,1)=.Cells(row,1) And .Cells(baserow,2)=.Cells(row,2) And .Cells(baserow,3)=.Cells(row,3) Then
    .Cells(row,1) = ""
    .Cells(row,2) = ""
    .Cells(row,3) = ""
  Else

    With .Range("A" & baserow & ":H" & row).Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    With .Range("A" & baserow & ":H" & row).Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    With .Range("A" & baserow & ":H" & row).Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    With .Range("A" & baserow & ":H" & row).Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    
    baserow = row
  End If
row = row + 1
Loop
End With
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343632
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinagamadjoпришлось убрать объявления типов данных, т.к. vbs сам справляется
Лучше определить явно. А то VBS запросто может определить переменные как Integer, и если строк окажется дофига, получишь Overflow.
В БК он тупо не дает явно определять и всё.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343659
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gamadjoОшибка "Неизвестная ошибка выполнения"
Хотя бы на каком операторе?
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343720
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так работает:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Dim row
Dim baserow

With WorkBook.Worksheets(1)
baserow=2
row=3

Do Until IsEmpty(.Cells(row,1))
  If .Cells(baserow,1)=.Cells(row,1) And .Cells(baserow,2)=.Cells(row,2) And .Cells(baserow,3)=.Cells(row,3) Then
    .Cells(row,1) = ""
    .Cells(row,2) = ""
    .Cells(row,3) = ""
  Else
    With .Range("A" & baserow & ":H" & row).Borders(7)
        .LineStyle = 1
    End With

    With .Range("A" & baserow & ":H" & row).Borders(8)
        .LineStyle = 1
    End With

    With .Range("A" & baserow & ":H" & row).Borders(9)
        .LineStyle = 1
    End With

    With .Range("A" & baserow & ":H" & row).Borders(10)
        .LineStyle = 1
    End With
    
    baserow = row
  End If
row = row + 1
Loop
End With



Дело в том, что БК работает видимо только с числовыми значениями типа линии и т.п.
Вот здесь брал необходимые https://msdn.microsoft.com/en-us/library/bb241348(v=office.12).aspx

Но теперь проблемка в том, что рисует не на 5 столбцов рамку, а на 8. По строкам все чудно.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343836
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gamadjoрисует не на 5 столбцов рамку, а на 8На сколько сказал, на столько и рисует. Распечатай буржуйский алфавит и отсчитай сколько надо...
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343994
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinagamadjoрисует не на 5 столбцов рамку, а на 8На сколько сказал, на столько и рисует. Распечатай буржуйский алфавит и отсчитай сколько надо...
Да, точно, извиняюсь, совсем туплю.

Но теперь ситуация следующая - он первый блок обводит весь, как надо, а второй и все последующие, обводит и первую строку, и все остальное, т.е. можно сказать двумя рамками.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39343997
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gamadjoНо теперь ситуация следующая - он первый блок обводит весь, как надо, а второй и все последующие, обводит и первую строку, и все остальное, т.е. можно сказать двумя рамками.
И я, кажется, понимаю из-за чего: как только попадается блок состоящий из одной строки - счетчик baserow малость сбивается. А вот как исправить, пока не догоняю.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39344000
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отладь ты свой код в Excel VBA по шагам, а по том переноси в скрипт. Сразу и увидишь, что лишнее и чего нехватает.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39344001
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gamadjoкак только попадается блок состоящий из одной строки - счетчик baserow малость сбиваетсяСфига бы? блоки он детектит правильно. А вот что ты его используешь в таком особом случае корректно - вот это и решай. Скорее всего, вводом ещё одной переменной.
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39344013
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaОтладь ты свой код в Excel VBA по шагам, а по том переноси в скрипт. Сразу и увидишь, что лишнее и чего нехватает.
Это как?
...
Рейтинг: 0 / 0
VBS, форматирование ячеек Excel
    #39344014
gamadjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё сделал как необходимо! Огромное Вам спасибо!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBS, форматирование ячеек Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]