-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsheets.py
165 lines (138 loc) · 5.96 KB
/
sheets.py
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env python
# coding: utf8
from __future__ import print_function
from apiclient import errors
def spreadsheet_update_cells(service, spreadsheetId, range_, valuesList):
"""
Permet d'écrire une valeur dans une cellule d'un spreadsheet.
- La propriété "range_" s'écrit s'écrit sous la forme : NomDeLaFeuille!cell (ex: Feuille_1!A10)
- La propriété "valuesList" doit être une liste (si plusieurs valeurs,
elles seront écrite dans les cellules suivante)
- La propriété "value_input_option" determine comment la data est interprétée.
Deux valeurs sont possible : 'RAW' ou 'USER_ENTERED'
La deuxième agit comme si c'était un utilisateur qui avait écrit dans la cellule.
"=3+2" agira donc comme une formule par exempl !
"""
value_input_option = 'RAW'
value_range_body = {"values": [valuesList]}
try:
response = service.spreadsheets().values().update(spreadsheetId=spreadsheetId,
range=range_,
valueInputOption=value_input_option,
body=value_range_body).execute()
return response
except errors.HttpError as error:
raise error
def protect_spreadsheet_element(service,
sheet_id,
spreadsheet_id,
warningOnly,
requestingUserCanEdit,
UsersList=[],
**kwargs):
"""
Function use to protect element into a spreadhseet. It could be a cell, a range of cells or an entire sheet.
Parameters :
- sheet_id : Could be find with 'get_spreadsheet_info' function
- warningOnly : True if you want that the cell can be edit but print a warning to the user
requestingUserCanEdit : True if the user who requested this protected range can edit
the protected area. This field is read-only.
- UsersList : List of users email. Is empty by default if not giving
- **kwargs : You can give the 'position' parameter. It must be a tuple with 4 int value.
position = (startRowIndex, endRowIndex, startColumnIndex, endColumnIndex)
If you don't use this parameter, the entire sheet will be protect.
"""
protect_range = {"sheetId": sheet_id}
for key, value in kwargs.items():
if key == "position":
protect_range["startRowIndex"] = value[0]
protect_range["endRowIndex"] = value[1]
protect_range["startColumnIndex"] = value[2]
protect_range["endColumnIndex"] = value[3]
body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"range": protect_range,
"description": "Protected with Project Manager",
"warningOnly": warningOnly,
"requestingUserCanEdit": requestingUserCanEdit,
"editors": {"users": UsersList}}
}
}
]
}
try:
response = service.spreadsheets().batchUpdate(
spreadsheetId=spreadsheet_id,
body=body).execute()
return response
except errors.HttpError as error:
raise error
def hide_spreadsheet_column(service, spreadsheet_id, sheet_id, column_index, hiddenByUser):
"""
Permet de masquer ou afficher une colonne d'un spreadhseet.
Attention, la première colonne (colonne A) à pour index 0 et non pas 1
HiddenByUser : True ou False
"""
requests = {
'updateDimensionProperties': {
"range": {
"sheetId": sheet_id,
"dimension": 'COLUMNS',
"startIndex": column_index,
"endIndex": column_index + 1,
},
"properties": {
"hiddenByUser": hiddenByUser,
},
"fields": 'hiddenByUser',
}
}
body = {'requests': requests}
try:
response = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id,
body=body).execute()
return response
except errors.HttpError as error:
raise error
def get_spreadsheet_info(service, spreadsheet_id, ranges):
# "ranges" s'écrit sous la forme ["my sheet!D9:D10", "my sheet!E12:E18"]
# True if grid data should be returned.
# This parameter is ignored if a field mask was set in the request.
include_grid_data = True # True if grid data should be returned
request = service.spreadsheets().get(spreadsheetId=spreadsheet_id,
ranges=ranges,
includeGridData=include_grid_data)
try:
response = request.execute()
# return full response but can be parsed. response is a 'dict'
return response
except errors.HttpError as error:
raise error
def add_spreadsheet_sheet(service, spreadsheet_id, sheet_name, column_nb, row_nb):
# "ranges" s'écrit sous la forme ["my sheet!D9:D10", "my sheet!E12:E18"]
# True if grid data should be returned.
# This parameter is ignored if a field mask was set in the request.
body = {
"requests": [
{
"addSheet": {
"properties": {
"title": sheet_name,
"gridProperties": {
"rowCount": row_nb,
"columnCount": column_nb
}
}
}
}
]
}
try:
response = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id,
body=body).execute()
return response
except errors.HttpError as error:
raise error