转换为excel单元格编号与python

qxsslcnc  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(142)

我有一个代码,从数据库中获取一些信息,并将其保存在Excel电子表格中。我的问题是在工作表中插入数字数据,因为当我运行并打开工作表时,我得到消息“转换为数字”。有没有一种方法可以用代码进行这种直接转换?

from hdbcli import dbapi
import pandas as pd
import time
from pyhdbcli import Error
from openpyxl import Workbook
from openpyxl.styles import numbers

try:
    con = dbapi.connect(
        address="xx",
        port=xx,
        user="xx",
        password="xx",
        databasename='xx'
    )

    declaracao = """
        SELECT "VTEXT_PAPH2", "DSC_COMPOSTO", "ARTNR", "MAKTX",sum("KF_QTDADE_VENDAS") AS "KF_QTDADE_VENDAS", sum("KF_PESO_LIQUIDO") AS KF_PESO_LIQUIDO, sum("KF_SOMA_RECEITA_BRUTA_VENDAS") AS KF_SOMA_RECEITA_BRUTA_VENDAS, sum("KF_DEDUCOES_VENDAS") AS KF_DEDUCOES_VENDAS, sum("KF_DEVOLUCAO_VENDAS") AS KF_DEVOLUCAO_VENDAS, sum("KF_IMPOSTOS_S_VENDAS") AS KF_IMPOSTOS_S_VENDAS, sum("KF_ISS") AS KF_ISS, sum("KF_ICMS") AS KF_ICMS, sum("KF_PIS") AS KF_PIS, sum("KF_COFINS") AS KF_COFINS, sum("KF_IPI") AS KF_IPI, sum("KF_REC_LIQ_VENDAS") AS KF_REC_LIQ_VENDAS, sum("KF_CUSTO_PROD_VENDIDO") AS KF_CUSTO_PROD_VENDIDO, sum("KF_MATERIAIS") AS KF_MATERIAIS, sum("KF_MATERIA_PRIMA") AS KF_MATERIA_PRIMA, sum("KF_INGREDIENTES") AS KF_INGREDIENTES, sum("KF_EMBALAGENS") AS KF_EMBALAGENS, sum("KF_SEMIACABADOS") AS KF_SEMIACABADOS, sum("KF_PRODUTO_ACABADO") AS KF_PRODUTO_ACABADO, sum("KF_CO_PRODUTO") AS KF_CO_PRODUTO, sum("KF_DIFER_INVENTARIO") AS KF_DIFER_INVENTARIO, sum("KF_SERVICOS") AS KF_SERVICOS, sum("KF_SUBCONTRATACAO") AS KF_SUBCONTRATACAO, sum("KF_CMV_REVENDA") AS KF_CMV_REVENDA, sum("KF_RESULT_BRUTO_OPER") AS KF_RESULT_BRUTO_OPER, sum("KF_DESP_COM_VARIAVEIS") AS KF_DESP_COM_VARIAVEIS, sum("KF_COMISSOES_VENDAS") AS KF_COMISSOES_VENDAS, sum("KF_DESP_LOGISTICA_SOMA") AS KF_DESP_LOGISTICA_SOMA, sum("KF_DESCONTOS_INSTITUC") AS KF_DESCONTOS_INSTITUC, sum("KF_MARGEM_DE_CONTRIB") AS KF_MARGEM_DE_CONTRIB, sum("KF_CUSTOS_FIXOS") AS KF_CUSTOS_FIXOS, sum("KF_MAO_DE_OBRA") AS KF_MAO_DE_OBRA, sum("KF_GASTOS_GERAIS_FAB") AS KF_GASTOS_GERAIS_FAB, sum("KF_DESPESAS_FIXAS") AS KF_DESPESAS_FIXAS, sum("KF_DESP_ADMINISTRATIV") AS KF_DESP_ADMINISTRATIV, sum("KF_DESP_COMERCIAIS_TRADE") AS KF_DESP_COMERCIAIS_TRADE, sum("KF_DESP_COMERCIAIS") AS KF_DESP_COMERCIAIS, sum("KF_DESP_TRADE_MKT") AS KF_DESP_TRADE_MKT, sum("KF_DESP_MKT") AS KF_DESP_MKT, sum("KF_DESP_OPERACIONAL") AS KF_DESP_OPERACIONAL, sum("KF_DESP_TRIBUTARIA") AS KF_DESP_TRIBUTARIA, sum("KF_DESPESAS_PERDA_E_PROV") AS KF_DESPESAS_PERDA_E_PROV, sum("KF_OUTROS_RESULT_OPER") AS KF_OUTROS_RESULT_OPER, sum("KF_OUTRAS_REC_OPER") AS KF_OUTRAS_REC_OPER, sum("KF_OUTRAS_DESP_OPER_SOMA") AS KF_OUTRAS_DESP_OPER_SOMA, sum("KF_RES_ANTES_EF_FINAN") AS KF_RES_ANTES_EF_FINAN, sum("KF_RESULTADO_FINANC") AS KF_RESULTADO_FINANC, sum("KF_RECEITA_FINANCEIRA") AS KF_RECEITA_FINANCEIRA, sum("KF_DESPESA_FINANCEIRA") AS KF_DESPESA_FINANCEIRA, sum("KF_RES_ANTES_IR_CSLL") AS KF_RES_ANTES_IR_CSLL, sum("KF_PROVISAO_IR_CSLL") AS KF_PROVISAO_IR_CSLL, sum("KF_RES_APOS_IR_CSLL") AS KF_RES_APOS_IR_CSLL, sum("KF_OVER_PRICING") AS KF_OVER_PRICING
        FROM "_SYS_BIC"."tirol.co/LUM_DRE_COPA_REAL_TESTE_ROBO" 
        WHERE (("MANDT" IN ('300') )) 
        AND (("DT_ANO" IN ('2023') )) 
        AND (("DT_BUDAT" BETWEEN ('20230501') 
        and ('20230524'))) 
        GROUP BY "MANDT", "DT_PERIO", "DT_ANO", "VRGAR", "VERSI", "DT_BUDAT", "ARTNR", "MAKTX", "VTEXT_PAPH2", "DSC_COMPOSTO"
    """
    cursor = con.cursor()
    cursor.execute(declaracao)
    linhas = cursor.fetchall()

    workbook = Workbook()
    sheet = workbook.active
    header = ['Sublinha desc.', 'Composto Descrição', 'Artigo', 'Artigo desc.', 'QUANTIDADE VENDAS LÍQUIDA', 'PESO VENDAS LÍQUIDO', 'RECEITA BRUTA DE VENDAS', '(=) Deduções Vendas', 'Devoluções Vendas', '-- Descontos Institucionais', 'Over Pricing', '- Impostos S/ Vendas', '-- ISS', '-- ICMS', '-- PIS', '-- COFINS', '-- IPI', '(=) RECEITA LÍQUIDA VENDAS', '- CUSTO PRODUTO VENDIDO', '-- Materiais', '--- Matéria Prima', '--- Ingredientes', '--- Embalagens', '--- Semiacabados', '--- Produtos Acabados', '--- Co-Produto', '--- Diferença de Inventário', '-- Serviços', '--- Subcontratação', '- CMV - REVENDA', '= RECEITA LÍQUIDA - CV.', '- Despesas Comerciais Variaveis', '-- Comissões de Vendas', '-- Despesas Logísticas', '= MARGEM de CONTRIBUIÇÃO', '- Custos Fixos', '-- Mão de Obra', '-- Gastos Gerais Fabricação', '- Despesas Fixas', '-- Despesas Administrativas', '-- Despesas Comerciais', '--- Desp. Comerciais (somente as desp comerciais)', '--- Desp. Trade Mkt (somente as desp de trade)', '-- Despesas de Marketing', '-- Despesas Operacional', '-- Despesas Tributárias', '-- Despesas com Perda e Provisões', '- Outros Resultados Operacionais', '-- Outras Receitas Operacionais', '-- Outras Despesas Operacionais', '= RES. ANTES EF. FINANCEIRO', '- Resultado Financeiro', '-- Receita Financeira', '-- Despesa Financeira', 'RES. ANTES IR/CSLL', '-- Provisão IR/CSLL', 'RES. APÓS IR/CSLL',]
    sheet.append(header)

    for linha in linhas:
        valores = [str(valor) if not isinstance(valor, (float, int)) else valor for valor in linha]
        sheet.append(valores)
        
        for cell in sheet[sheet.max_row]:
            if isinstance(cell.value, (float, int)):
                cell.number_format = numbers.FORMAT_CURRENCY_BRL_SIMPLE

    workbook.save('dados3.xlsx')

except Error as e:
    print("Erorr - ", e)

finally:
    cursor.close()
    con.close()

为了解决这个问题,我尝试了下面这行代码,但它仍然没有解决这个问题

if isinstance(cell.value, (float, int)):
    cell.number_format = numbers.FORMAT_CURRENCY_BRL_SIMPLE

Convert in nuber

8mmmxcuj

8mmmxcuj1#

要使用Python转换Excel电子表格中的数字数据,您可以使用openpyxl库并将单元格的数字格式设置为所需的格式。在您的代码中,您已经导入了openpyxl,因此您可以如下设置数字格式:

from openpyxl.styles import numbers
#...
for cell in sheet[sheet.max_row]:
    if isinstance(cell.value, (float, int)):
        cell.number_format = numbers.FORMAT_CURRENCY_BRL_SIMPLE

这将检查单元格值是浮点还是整数,如果是,则将数字格式设置为巴西货币与简单格式。
如果您想设置不同的数字格式,可以参考openpyxl中的numbers模块,该模块有许多可用的格式可供选择。

相关问题