我正在寻找任何可以帮助我优化报告的建议。
报告包含数据透视表,用于从其他电子表格中提取数据。数据透视表中的数据按VBA宏着色和分组。 我主要关心的是着色和分组。
我必须为线条的大部分背景着色,然后我必须对它们进行分组。我正在用数据读取表格中的所有行,然后我用层次结构切割粘贴5列,定义行着色和分组规则。如果值在列中匹配,我会逐行检查。
层次结构示例:
CoreElement Category Subcategory Code Product
6 26 161 1289 3014659
6 26 161 1245 3014655
6 26 161 1289 3014585
6 26 161 1282 3019640
7 28 164 164 164
7 7 7 7 7
7 7 7 7 7
5 22 142 1208 1208
5 22 142 142 142
着色:
Set oColor = Worksheets("Category_Sales").Range("A13:A" & MaxLineNumber + 13)
For Each CellId In oColor.Cells
k = CellId.Column
r = CellId.Row
If Cells(r, 64).Value = "-1" Then 'Store Sales
Range("A" & r & ":AV" & r).Interior.Color = RGB(204, 255, 204)
Range("A" & r & ":AV" & r).Font.Bold = True
ElseIf Cells(r, 64).Value = Cells(r, 65).Value And Cells(r, 65).Value = Cells(r, 66).Value And Cells(r, 64) <> "" Then 'Core Element
Range("A" & r & ":AV" & r).Interior.Color = RGB(214, 225, 238)
Range("A" & r & ":AV" & r).Font.Bold = True
ElseIf Cells(r, 64).Value <> Cells(r, 65).Value And Cells(r, 65).Value = Cells(r, 66).Value Then 'Category
Range("A" & r & ":AV" & r).Interior.Color = RGB(255, 255, 204)
ElseIf Cells(r, 65).Value <> Cells(r, 66).Value And Cells(r, 66).Value = Cells(r, 67).Value Then 'Subcategory
Range("A" & r & ":AV" & r).Interior.Color = RGB(191, 191, 191)
ElseIf Cells(r, 66).Value <> Cells(r, 67).Value And Cells(r, 67).Value = Cells(r, 68).Value Then 'BMC
Range("A" & r & ":AV" & r).Interior.Color = RGB(217, 217, 217)
Else
Range("A" & r & ":AV" & r).Interior.Color = xlNone 'Product
End If
Next CellId
创建两个第一个分组的宏,其余组的宏几乎相同:
k = 13
Set oColor = Worksheets("Category_Sales").Range("A13:A" & MaxLineNumber + 13)
For Each CellId In oColor.Cells
r = CellId.Row
If Cells(r, 64).Value = "-1" Then
k = k + 1
ElseIf Cells(r, 64).Value <> Cells(r + 1, 64).Value And Cells(r, 64).Value <> "" Then
Rows(k & ":" & r - 1).Rows.Group
k = r + 1
End If
Next CellId
k = 13
Set oColor = Worksheets("Category_Sales").Range("A13:A" & MaxLineNumber + 13)
For Each CellId In oColor.Cells
r = CellId.Row
If Cells(r, 65).Value = Cells(r, 64).Value Then
k = k + 1
ElseIf Cells(r, 65).Value <> Cells(r + 1, 65).Value And Cells(r, 65).Value <> "" Then
Rows(k & ":" & r - 1).Rows.Group
k = r + 1
End If
Next CellId
在包含数据的表格中,我获得了22,000行。 此报告将另存为.xlsb工作簿。
答案 0 :(得分:0)
这是我在大型报告中使用的代码: 只需在代码的开头调用OnStart,最后调用OnEnd。
print(df['text'].apply(lambda text: [sent for sent in sent_tokenize(text)
if any([(w2.lower() in w.lower()) for w in word_tokenize(sent)
for w2 in searched_words])
])
)