当前位置: 首页>>代码示例>>Python>>正文


Python DocxTemplate.get_docx方法代码示例

本文整理汇总了Python中docxtpl.DocxTemplate.get_docx方法的典型用法代码示例。如果您正苦于以下问题:Python DocxTemplate.get_docx方法的具体用法?Python DocxTemplate.get_docx怎么用?Python DocxTemplate.get_docx使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在docxtpl.DocxTemplate的用法示例。


在下文中一共展示了DocxTemplate.get_docx方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: main

# 需要导入模块: from docxtpl import DocxTemplate [as 别名]
# 或者: from docxtpl.DocxTemplate import get_docx [as 别名]
def main():
    config = configparser.ConfigParser()
    config.read('autotemplation.ini')
    template_folder_ids = config['DEFAULT']['TemplateFolderID'].split(',')
    destination_folder_name = config['DEFAULT']['DestinationFolderName']
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    drive_service = discovery.build('drive', 'v3', http=http)
    destination_folder_id = get_or_create_destination_folder_id(
        drive_service, destination_folder_name)
    template_file = get_template(drive_service, template_folder_ids)
    mime_type, is_sheet = get_mime_type(template_file['mimeType'])
    request = drive_service.files().export_media(
        fileId=template_file['id'],
        mimeType=mime_type)
    fh = io.BytesIO()
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print("Download %d%%." % int(status.progress() * 100))
    if is_sheet:
        print("Spreadsheet selected, converting to Doc. (Slow)")
        table_data = get_sheet_data(fh)
        row_count = len(table_data)
        col_count = len(table_data[0])
        document = Document()
        doc_table = document.add_table(rows=row_count,
                                       cols=col_count)
        for r, row in enumerate(table_data):
            row_cells = doc_table.rows[r].cells
            print("Converting row {}/{}...".format(r+1, row_count), end="\r")
            for i, cell in enumerate(row):
                if cell:
                    row_cells[i].text = cell
        print("Conversion complete. "
              "Warning: Processing large sheets will take some time.")
        temp_doc_file = io.BytesIO()
        document.save(temp_doc_file)
        doc = DocxTemplate(temp_doc_file)
    else:
        doc = DocxTemplate(fh)
    full_doc = doc.get_docx()

    template_vars = get_template_variables(full_doc, template_file['name'])
    if any('__' in x for x in template_vars):
        worksheet = get_worksheet(credentials)
        worksheet_headers = get_worksheet_headers(worksheet)
    context = dict()
    get_date_and_set_context(context)
    for var in template_vars:
        if var not in context:
            if '__' in var:
                context[var] = worksheet_lookup(
                    worksheet, worksheet_headers, var)
            else:
                context[var] = input("Enter a value for {}:  ".format(var))
    new_file_name = get_target_name(template_file['name'], context)
    doc.render(context)
    temp_file = tempfile.NamedTemporaryFile()
    doc.save(temp_file)
    if is_sheet:
        csv_name = '{}.csv'.format(new_file_name)
        doc_csv = DocxTemplate(temp_file)
        csv_data = get_table_data_for_csv(doc_csv)
        if csv_data:
            with open(csv_name, 'w') as output:
                writer = csv.writer(output, lineterminator='\n')
                writer.writerows(csv_data)
            print('{} created in local folder'.format(csv_name))
        else:
            print('Unable to create CSV. '
                  'Less than or more than 1 table found.')
        workbook = Workbook()
        sheet = workbook.get_active_sheet()
        for row in csv_data:
            sheet.append(row)
        workbook.save(temp_file)
        upload_mimetype = 'application/vnd.google-apps.spreadsheet'
    else:
        upload_mimetype = 'application/vnd.google-apps.document'

    file_metadata = {
        'name': new_file_name,
        'parents': [destination_folder_id],
        'mimeType': upload_mimetype
    }
    media = MediaFileUpload(temp_file.name,
                            mimetype=mime_type,
                            resumable=True)
    drive_service.files().create(body=file_metadata,
                                 media_body=media,
                                 fields='id').execute()
    print('{} placed in folder {}.'.format(new_file_name,
                                           destination_folder_name))
    temp_file.close()
开发者ID:stelligent,项目名称:autotemplation,代码行数:98,代码来源:autotemplation.py


注:本文中的docxtpl.DocxTemplate.get_docx方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。