Esempio n. 1
0
    def write_drive_sheet_cells(self, user_access_token, sheet_token, sheet_id, range, values):
        """写入单元格

        :type self: OpenLark
        :param user_access_token: user_access_token
        :type user_access_token: str
        :param sheet_token: 文件的 token 列表
        :type sheet_token: str
        :param sheet_id: 作为表格唯一识别参数
        :type sheet_id: str
        :param range: 范围,形如:'A1:D2'
        :type range: str
        :param values: 数据,二位数组,每个子数组就是一行数据
        :type values: list[list[Any]]
        :rtype: (int, list[list[Any]])
        :return: 版本,值的二维数组

        该接口用于根据 sheet_token 和 range 向单个范围写入数据,若范围内有数据,将被更新覆盖;

        单次写入不超过5000行,100列,每个格子大小为0.5M。

        https://open.feishu.cn/document/ukTMukTMukTM/uAjMzUjLwIzM14CMyMTN
        """
        url = self._gen_request_url(
            '/open-apis/sheet/v2/spreadsheets/{}/values'.format(sheet_token))
        body = {
            'valueRange': {
                'range': join_range(sheet_id, range),
                'values': [[i.as_sheet_dict() if hasattr(i, 'as_sheet_dict') else i for i in value] for value in values]
            }
        }
        self._put(url, body=body, auth_token=user_access_token)
Esempio n. 2
0
    def read_drive_sheet_cells(self, user_access_token, sheet_token, sheet_id, range, to_str=False):
        """读取单元格

        :type self: OpenLark
        :param user_access_token: user_access_token
        :type user_access_token: str
        :param sheet_token: 文件的 token 列表
        :type sheet_token: str
        :param sheet_id: 作为表格唯一识别参数
        :type sheet_id: str
        :param range: 范围,形如:'A1:D2'
        :type range: str
        :param to_str: 是否返回 to_str 后的值
        :type to_str: bool
        :rtype: (int, list[list[Any]])
        :return: 版本,值的二维数组

        该接口用于根据 sheet_token 和 range 读取表格单个范围的值,返回数据限制为10M。

        https://open.feishu.cn/document/ukTMukTMukTM/ugTMzUjL4EzM14COxMTN
        """
        url = self._gen_request_url(
            '/open-apis/sheet/v2/spreadsheets/{}/values/{}'.format(sheet_token, join_range(sheet_id, range)))
        if to_str:
            url = url + '?valueRenderOption=ToString'
        res = self._get(url, auth_token=user_access_token)
        revision = res['data']['revision']  # type: int
        values = res['data']['valueRange'].get('values', [])  # type: List[List[Any]]
        return revision, values
Esempio n. 3
0
    def merge_drive_sheet_cells(self, user_access_token, sheet_token, sheet_id, range, merge_type):
        """合并单元格

        :type self: OpenLark
        :param user_access_token: user_access_token
        :type user_access_token: str
        :param sheet_token: 文件的 token 列表
        :type sheet_token: str
        :param sheet_id: 作为表格唯一识别参数
        :type sheet_id: str
        :param range: 范围,形如:'A1:D2'
        :type range: str
        :param merge_type: lock 信息
        :type merge_type: DriveSheetMergeType
        :rtype: str

        该接口用于根据 sheet_token 和维度信息合并单元格;单次操作不超过5000行,100列。

        https://open.feishu.cn/document/ukTMukTMukTM/ukDNzUjL5QzM14SO0MTN
        """
        url = self._gen_request_url('/open-apis/sheet/v2/spreadsheets/{}/merge_cells'.format(sheet_token))
        body = {
            'range': join_range(sheet_id, range),
            'mergeType': converter_enum(merge_type),
        }

        self._post(url, body=body, auth_token=user_access_token)
Esempio n. 4
0
    def set_drive_sheet_style(self, user_access_token, sheet_token, sheet_id, range, style=None, raw_style=None):
        """设置单元格样式

        :type self: OpenLark
        :param user_access_token: user_access_token
        :type user_access_token: str
        :param sheet_token: 文件的 token 列表
        :type sheet_token: str
        :param sheet_id: 作为表格唯一识别参数
        :type sheet_id: str
        :type sheet_id: str
        :param range: 范围,形如:'A1:D2'
        :type range: str
        :param style: 单元格样式,具体请参考文档:https://open.feishu.cn/document/ukTMukTMukTM/ukjMzUjL5IzM14SOyMTN
        :type style: DriveSheetStyle
        :param raw_style: 单元格样式 的 原始样式
        :type raw_style: Any

        该接口用于根据 sheet_token 、range 和样式信息更新单元格样式;单次写入不超过5000行,100列。

        https://open.feishu.cn/document/ukTMukTMukTM/ukjMzUjL5IzM14SOyMTN
        """

        if not raw_style and style:
            raw_style = style.as_sheet_style()

        url = self._gen_request_url('/open-apis/sheet/v2/spreadsheets/{}/style'.format(sheet_token))
        body = {
            'appendStyle': {
                'range': join_range(sheet_id, range),
                'style': raw_style
            }
        }

        self._put(url, body=body, auth_token=user_access_token)
Esempio n. 5
0
    def prepend_write_drive_sheet_cells(self, user_access_token, sheet_token, sheet_id, range, values):
        """在表前面插入数据

        :type self: OpenLark
        :param user_access_token: user_access_token
        :type user_access_token: str
        :param sheet_token: 文件的 token 列表
        :type sheet_token: str
        :param sheet_id: 作为表格唯一识别参数
        :type sheet_id: str
        :param range: 范围,形如:'A1:D2'
        :type range: str
        :param values: 数据,二位数组,每个子数组就是一行数据
        :type values: list[list[Any]]
        :rtype: DriveInsertSheet

        该接口用于根据 sheet_token 和 range 向范围之前增加相应数据的行和相应的数据,相当于数组的插入操作;

        单次写入不超过5000行,100列,每个格子大小为0.5M。

        https://open.feishu.cn/document/ukTMukTMukTM/uIjMzUjLyIzM14iMyMTN
        """
        url = self._gen_request_url('/open-apis/sheet/v2/spreadsheets/{}/values_prepend'.format(sheet_token))
        body = {
            'valueRange': {
                'range': join_range(sheet_id, range),
                'values': [[i.as_sheet_dict() if hasattr(i, 'as_sheet_dict') else i for i in value] for value in values]
            }
        }
        res = self._post(url, body=body, auth_token=user_access_token)

        return _pack_insert_sheet(sheet_token, sheet_id, res)
Esempio n. 6
0
    def append_write_drive_sheet_cells(self,
                                       user_access_token,
                                       sheet_token,
                                       sheet_id,
                                       range,
                                       values,
                                       overwrite_empty_line=False):
        """在表后面插入数据

        :type self: OpenLark
        :param user_access_token: user_access_token
        :type user_access_token: str
        :param sheet_token: 文件的 token 列表
        :type sheet_token: str
        :param sheet_id: 作为表格唯一识别参数
        :type sheet_id: str
        :param range: 范围,形如:'A1:D2'
        :type range: str
        :param values: 数据,二位数组,每个子数组就是一行数据
        :type values: list[list[Any]]
        :param overwrite_empty_line: 是否覆盖空行(第一个格子是空,就是空行)。
                                     如果:覆盖 && range 的左上角第一个格子为空,则:从这个格子开始,数据被覆盖
                                     如果:不覆盖 && range 的左上角第一个格子为空 && 其他数据不为空,则将将这些数据下移 N 格
                                     再插入数据
        :type overwrite_empty_line: bool
        :rtype: DriveInsertSheet

        该接口用于根据 sheet_token 和 range 遇到空行则进行覆盖追加或新增行追加数据。

        空行:默认该行第一个格子是空,则认为是空行;单次写入不超过5000行,100列,每个格子大小为0.5M。

        https://open.feishu.cn/document/ukTMukTMukTM/uMjMzUjLzIzM14yMyMTN
        """

        url = self._gen_request_url(
            '/open-apis/sheet/v2/spreadsheets/{}/values_append'.format(
                sheet_token))
        if not overwrite_empty_line:
            url = url + '?insertDataOption=INSERT_ROWS'
        body = {
            'valueRange': {
                'range': join_range(sheet_id, range),
                'values': values
            }
        }
        res = self._post(url, body=body, auth_token=user_access_token)

        return _pack_insert_sheet(sheet_token, sheet_id, res)