Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBS, форматирование ячеек Excel / 19 сообщений из 19, страница 1 из 1
08.11.2016, 14:05
    #39343484
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Всем доброго времени суток!

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

Работаю в БК (БОСС-кадровик), работа над формированием отчета, как я понял - на 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
08.11.2016, 14:08
    #39343487
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
gamadjoНужно ее переформатировать вот в такой вид:
шапка шапка шапка шапка шапка
11111 11111 11111 ааааа ааааа
ааааа ааааа
22222 22222 22222 ааааа ааааа
ааааа ааааа
ааааа ааааа
33333 33333 33333 ааааа ааааа
ааааа ааааа


Не знал, что пробелы удалятся.
Вот такой должен быть результаты:
шапка шапка шапка шапка шапка
11111 11111 11111 ааааа ааааа
_____ _____ _____ ааааа ааааа
22222 22222 22222 ааааа ааааа
_____ _____ _____ ааааа ааааа
_____ _____ _____ ааааа ааааа
33333 33333 33333 ааааа ааааа
_____ _____ _____ ааааа ааааа
...
Рейтинг: 0 / 0
08.11.2016, 14:50
    #39343540
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
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
08.11.2016, 15:12
    #39343556
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Akina , Вы просто чудо! То, что нужно и это работает. Разве что пришлось убрать объявления типов данных, т.к. vbs сам справляется :)

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

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

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

Код: 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
08.11.2016, 15:55
    #39343613
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Забыл впихнуть под кат. Простите.
...
Рейтинг: 0 / 0
08.11.2016, 16:10
    #39343628
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
gamadjoпришлось убрать объявления типов данных, т.к. vbs сам справляется
Лучше определить явно. А то VBS запросто может определить переменные как Integer, и если строк окажется дофига, получишь Overflow.
...
Рейтинг: 0 / 0
08.11.2016, 16:11
    #39343631
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Снова ругается на типы, я убрал. Первые два - никаких проблем. С третьим, 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
08.11.2016, 16:12
    #39343632
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Akinagamadjoпришлось убрать объявления типов данных, т.к. vbs сам справляется
Лучше определить явно. А то VBS запросто может определить переменные как Integer, и если строк окажется дофига, получишь Overflow.
В БК он тупо не дает явно определять и всё.
...
Рейтинг: 0 / 0
08.11.2016, 16:37
    #39343659
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
gamadjoОшибка "Неизвестная ошибка выполнения"
Хотя бы на каком операторе?
...
Рейтинг: 0 / 0
08.11.2016, 17:19
    #39343720
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Вот так работает:
Код: 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
08.11.2016, 19:12
    #39343836
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
gamadjoрисует не на 5 столбцов рамку, а на 8На сколько сказал, на столько и рисует. Распечатай буржуйский алфавит и отсчитай сколько надо...
...
Рейтинг: 0 / 0
09.11.2016, 08:25
    #39343994
gamadjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, форматирование ячеек Excel
Akinagamadjoрисует не на 5 столбцов рамку, а на 8На сколько сказал, на столько и рисует. Распечатай буржуйский алфавит и отсчитай сколько надо...
Да, точно, извиняюсь, совсем туплю.

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


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