
Na segunda-feira, você precisa carregar uma planilha em um DataFrame. Na quarta-feira, um cliente enviou um modelo de pasta de trabalho que precisa ser atualizado sem perder seus gráficos. Na sexta-feira, a equipe financeira precisa que o relatório seja exportado para PDF, enquanto a pasta de trabalho original deve permanecer protegida por senha. Escolher a melhor biblioteca Excel para Python significa adequar a biblioteca a essas diferentes tarefas. Uma escolha ruim pode não se tornar evidente de imediato: gráficos desaparecem após salvar, fórmulas não têm resultados calculados utilizáveis, ou uma pasta de trabalho binária .xlsb não pode ser lida pela biblioteca escolhida.
Para ajudar os desenvolvedores a fazerem a escolha certa, testamos quatro bibliotecas usando fixtures de teste compartilhadas e um conjunto de dados comum de 50.000 linhas: pandas 3.1.0, openpyxl 3.1.5, XlsxWriter 3.3.1 e Spire.XLS for Python 16.8.2 (comercial). Avaliamos o suporte a formatos de arquivo, a edição e preservação de pastas de trabalho, o tratamento de fórmulas, a conversão para PDF e HTML, a criptografia de pastas de trabalho, o desempenho, o uso de memória, os requisitos de instalação e o licenciamento. Os resultados mostram o que cada biblioteca faz bem, onde estão suas limitações e qual opção pode ser a mais adequada para diferentes projetos. Esta comparação concentra-se em três bibliotecas de código aberto e um SDK comercial; outras soluções comerciais estão fora de seu escopo.
Qual biblioteca Excel para Python você deve escolher?
Cada uma das três bibliotecas de código aberto faz uma tarefa muito bem, e o Spire.XLS cobre projetos em que essas tarefas precisam ser executadas em conjunto. A tabela abaixo apresenta a versão resumida. As seções seguintes explicam o raciocínio e mostram os dados de teste.
| Biblioteca | Ideal para | Consideração de longo prazo |
|---|---|---|
| pandas | Análise de dados | Requer outras ferramentas para operações no nível da pasta de trabalho |
| openpyxl | Editar modelos XLSX | Sem mecanismo de cálculo de fórmulas integrado |
| XlsxWriter | Criar relatórios formatados | Não consegue reabrir pastas de trabalho existentes |
| Spire.XLS | Processamento de Excel em várias etapas | Licença comercial com suporte do fornecedor e opções de atualização |
Se você só precisa ler dados para um DataFrame, o pandas com o mecanismo calamine é suficiente, e pode parar de ler aqui. Se seu projeto está crescendo em direção à automação, consulte nosso guia para automatizar a escrita em Excel em Python.
O que as bibliotecas Excel de código aberto para Python fazem de melhor
pandas, openpyxl e XlsxWriter são complementares, não intercambiáveis. Cada uma se destaca em uma única tarefa, e é por isso que muitos projetos acabam usando duas ou três delas lado a lado.
pandas: leitura e análise de dados tabulares
O pandas transforma uma planilha em um DataFrame, que é o formato certo para análise. Com o mecanismo calamine, ele lê arquivos .xlsx, .xlsb, .ods e .xls, e foi o leitor mais rápido em nosso teste: 294 ms para 50.000 linhas × 6 colunas (mediana de cinco execuções). A formatação é possível por meio de Styler com jinja2, que preenche e coloca células em negrito conforme esperado. No pandas 3.1, nossas tentativas de formato numérico não surtiram efeito, e as células permaneceram em Geral.
O limite é conceitual. Um DataFrame não é uma pasta de trabalho. Gravá-lo de volta com to_excel reconstrói o arquivo, portanto gráficos, imagens e tabelas dinâmicas não são mantidos. Fórmulas podem ser escritas, mas não são calculadas. Para saber mais sobre leitura, consulte ler arquivos Excel em Python e a documentação de E/S de Excel do pandas.
openpyxl: edição de arquivos .xlsx e .xlsm existentes
O openpyxl carrega uma pasta de trabalho, permite alterá-la e a salva. Em nossa pasta de trabalho de teste, um ciclo de ida e volta manteve gráficos, imagens, formatação condicional, validação de dados, células mescladas, painéis congelados, filtros e partes de tabela dinâmica, e o Excel 16.0 abriu o resultado sem erros. É um resultado para nossas fixtures, não uma promessa para toda forma DrawingML ou projeto VBA.
Seus limites são específicos. Ele suporta quatro formatos OOXML (.xlsx, .xlsm, .xltx, .xltm). Não possui mecanismo de cálculo, portanto as fórmulas permanecem sem cálculo. Não consegue abrir arquivos protegidos por senha sem uma ferramenta externa como o msoffcrypto. Tabelas dinâmicas podem ser preservadas, mas criar uma significa montar o cache e a definição manualmente por meio da chamada de baixo nível add_pivot. Seu modo write_only usou a menor memória entre todos os gravadores que testamos: 79,4 MB. Documentação: openpyxl.
XlsxWriter: geração de novos relatórios
O XlsxWriter grava novos arquivos .xlsx e os grava bem. Ele suporta formatos, gráficos, imagens, formatação condicional, validação de dados e fórmulas com valores em cache. Foi o gravador mais rápido em nosso teste, com 1,74 s para 50.000 linhas, à frente de todos os outros métodos deste teste, incluindo pandas e openpyxl.
Ele não consegue ler ou modificar um arquivo existente. Não possui criação de tabela dinâmica, nem criptografia, nem saída .xlsb ou .ods. Documentação: XlsxWriter.
Quando as bibliotecas Excel básicas não são suficientes
As bibliotecas de código aberto deixam de ser suficientes quando uma tarefa ultrapassa a fronteira entre suas especialidades. Cinco situações aparecem repetidamente.
- Vários formatos de arquivo em um único pipeline. O pandas consegue ler xls, xlsb e ods, mas retorna um DataFrame e não consegue salvar a pasta de trabalho editada de volta na mesma forma. openpyxl e XlsxWriter não lidam com esses formatos de forma alguma.
- Fórmulas que precisam ser recalculadas após uma edição. O openpyxl mantém as fórmulas, mas não consegue avaliá-las. O pandas grava fórmulas sem resultados, e o valor em cache depende do mecanismo por baixo: um valor vazio com openpyxl, um espaço reservado 0 com xlsxwriter. O Excel recalcula ao abrir, mas qualquer outro leitor não vê nada útil.
- Tabelas dinâmicas e outros objetos complexos. O openpyxl consegue manter uma tabela dinâmica existente, mas não oferece uma forma de alto nível de criar uma. XlsxWriter e pandas não oferecem nenhuma.
- Saída em PDF, HTML ou imagem. Converter uma planilha em um PDF paginado exige uma biblioteca adicional, e você fica responsável pelo layout da página, escala e paginação.
- Proteção por senha. Nenhuma das três bibliotecas de código aberto consegue gravar uma pasta de trabalho que exija senha para abrir.
Nada disso torna as ferramentas de código aberto uma escolha ruim. O projeto simplesmente cresceu além do que uma ferramenta de propósito único cobre, e o custo passa para o código de cola: conversões de formato, transferências de arquivos entre bibliotecas e atualizações de dependências separadas. Cada ferramenta extra acrescenta sua própria dependência, suas próprias exceções e sua própria forma de passar arquivos adiante.
O que você pode fazer com o Spire.XLS for Python
O Spire.XLS for Python é uma biblioteca comercial que lida com leitura, edição, cálculo, conversão e proteção de arquivos Excel por meio de um único modelo de objeto de pasta de trabalho. Ele não precisa do Microsoft Office instalado. Veja o que isso abrange na prática, com os limites declarados.
Leitura e gravação de vários formatos Excel
LoadFromFile abre arquivos .xls, .xlsx, .xlsm, .xlsb e .ods, e SaveToFile grava em xlsx, xls, xlsb, xlsm, ods, csv, pdf, html e png. O CSV é carregado com um argumento de delimitador, como LoadFromFile("data.csv", ","). Um caso típico é um sistema upstream que exporta .xlsb enquanto o consumidor downstream espera .xlsx ou PDF.
from spire.xls import *
wb = Workbook()
wb.LoadFromFile("upstream.xlsb")
wb.SaveToFile("converted.xlsx", ExcelVersion.Version2016)
Uma observação de compatibilidade: em nosso teste, o Excel 16.0 abriu os arquivos .xlsb e .ods produzidos pelo Spire.XLS, enquanto os leitores do pandas (pyxlsb e calamine) não abriram esses arquivos específicos. Faça testes de regressão de formatos legados com os leitores que seus sistemas downstream usam.
Edição de pastas de trabalho existentes e criação de tabelas dinâmicas
Carregue uma pasta de trabalho, altere-a, salve-a. Em nossa pasta de trabalho de teste, gráficos, imagens, formatação condicional, validação de dados, células mescladas, painéis congelados, filtros e tabelas dinâmicas sobreviveram ao ciclo de ida e volta, sem erros quando o Excel abriu o arquivo. Formas DrawingML complexas ainda devem ser verificadas com seus arquivos reais.
Criar uma tabela dinâmica leva duas chamadas:
sheet = wb.Worksheets[0]
cache = wb.PivotCaches.Add(sheet.Range["A1:F20"])
pivot = sheet.PivotTables.Add("SalesPivot", sheet.Range["H3"], cache)
O intervalo de origem deve começar com uma linha de cabeçalho, e essas chamadas criam a estrutura da tabela dinâmica; os campos de linha e de valor são configurados depois. Consulte criar ou operar tabelas dinâmicas no Excel para a configuração dos campos. Em nosso teste, o Excel abriu o arquivo resultante e contou uma tabela dinâmica.
Recálculo de fórmulas e valores em cache
Três termos importam aqui: a fórmula, seu resultado em cache e o recálculo. Um arquivo com uma fórmula, mas sem resultado em cache, parece vazio para qualquer leitor que não calcule. O Spire.XLS inclui um mecanismo de cálculo, portanto chamar CalculateAllValue() calcula os resultados antes de você salvar, e outras ferramentas que leem o arquivo podem vê-los.
wb.LoadFromFile("model.xlsx")
wb.CalculateAllValue()
wb.SaveToFile("model_calculated.xlsx", ExcelVersion.Version2016)
openpyxl e pandas não conseguem fazer esta etapa. O XlsxWriter consegue armazenar um valor em cache, mas apenas se você fornecer o número por conta própria. Para sintaxe de fórmulas e exemplos no nível da célula, consulte adicionar ou ler fórmulas no Excel.
Conversão de Excel para PDF, HTML e imagens
Para PDF, defina o layout da página primeiro. Com orientação paisagem e escala de ajuste à página, o gráfico do nosso teste coube na página em vez de ser cortado.
sheet = wb.Worksheets[0]
sheet.PageSetup.Orientation = PageOrientationType.Landscape
sheet.PageSetup.FitToPagesWide = 1
sheet.PageSetup.FitToPagesTall = 1
wb.SaveToFile("report.pdf", FileFormat.PDF)
A saída HTML usa por padrão um conjunto de quadros com uma pasta de recursos. Definir HTMLOptions.ImageEmbedded = True produz um único arquivo autocontido (61 KB em nosso teste, com duas imagens incorporadas como base64). A exportação de imagem está disponível por meio de ToImage. Consulte nosso guia sobre converter Excel para PDF em Python para detalhes de layout. Os limites da edição de avaliação são abordados na seção de licenciamento abaixo.
Proteção de pastas de trabalho Excel com senhas
Protect("password") define uma senha de abertura. Em nosso teste, o arquivo salvo tornou-se um contêiner criptografado que não podia ser aberto sem a senha, e o Spire.XLS conseguiu reabri-lo quando a senha foi fornecida. Isso é adequado para entrega de relatórios e casos de conformidade. As proteções em nível de permissão, como bloquear planilhas específicas, são configuradas separadamente; siga a documentação oficial para isso. Observe que, na sobrecarga de duas strings, o segundo argumento de SaveToFile é um delimitador de CSV, não uma senha.
Construindo um fluxo de trabalho de processamento de Excel em várias etapas
Um serviço de relatórios mensais mostra a diferença claramente. A tarefa: ler um arquivo .xlsb upstream, atualizar seus valores de entrada, recalcular as fórmulas, produzir um PDF, criptografar a cópia do Excel e salvá-la como .xlsx.
| pandas + openpyxl + 2 outras ferramentas | XlsxWriter | Spire.XLS | |
|---|---|---|---|
| Ler .xlsb | ✅ (apenas dados) | ❌ | ✅ |
| Manter objetos da pasta de trabalho | Não (no caminho do xlsb) | ❌ | ✅ |
| Recalcular fórmulas | ❌ | ❌ | ✅ |
| Exportar PDF | Requer biblioteca extra | Requer biblioteca extra | ✅ |
| Criptografar | Requer biblioteca extra | ❌ | ✅ |
| Dependências para a tarefa | 4 ou mais | 1 (apenas gravação) | 1 |
A rota de código aberto funciona, mas distribui a tarefa entre pelo menos quatro ferramentas: uma para ler o formato binário, uma para editar, uma para renderizar um PDF e uma para criptografar, além de um conversor se você precisar manter os objetos da pasta de trabalho. Cada transferência é um arquivo gravado por uma biblioteca e relido por outra. Com o Spire.XLS, as mesmas etapas são executadas em um único objeto de pasta de trabalho:
from spire.xls import *
wb = Workbook()
wb.LoadFromFile("monthly_input.xlsb") # 1. read legacy format
sheet = wb.Worksheets[0]
sheet.Range["B2"].NumberValue = 125000 # 2. update an input value
wb.CalculateAllValue() # 3. recalculate formulas
sheet.PageSetup.Orientation = PageOrientationType.Landscape
sheet.PageSetup.FitToPagesWide = 1
sheet.PageSetup.FitToPagesTall = 1
wb.SaveToFile("monthly_report.pdf", FileFormat.PDF) # 4. PDF
wb.Protect("s3cret") # 5. encrypt
wb.SaveToFile("monthly_report.xlsx", ExcelVersion.Version2016)
wb.Dispose()

Custo total de desenvolvimento e manutenção
Não medimos o tempo economizado, e este artigo não afirma um número. A diferença que podemos descrever é a complexidade: quantas etapas, dependências e interfaces a tarefa envolve.
| Dimensão | Combinação de código aberto | Spire.XLS |
|---|---|---|
| Integração | Transferências de dados e conversões de formato entre ferramentas | Uma única API de pasta de trabalho |
| Manutenção | Vários componentes para atualizar e manter compatíveis | Uma única linha de versão do produto |
| Solução de problemas | Problemas distribuídos entre projetos separados | Um único ponto de entrada, além do suporte do fornecedor |
| Suporte | Comunidade e rastreadores de problemas | Canais de suporte oficiais, por licença |
O resumo é uma biblioteca de processamento de Excel, não uma dependência. Seu projeto ainda usará outros pacotes. O que muda é que as etapas de Excel compartilham um único modelo de objeto.
Quer testar o fluxo de trabalho você mesmo? Comece com o Free Spire.XLS for Python para leitura e gravação de xlsx e relatórios pequenos, ou use a versão de avaliação do Spire.XLS for Python para avaliar a API completa.
Desempenho, implantação, suporte e manutenção
Benchmarks de desempenho
Executamos cada operação em seu próprio processo, com uma execução de aquecimento descartada e depois cinco execuções medidas, relatando a mediana. O conjunto de dados era de 50.000 linhas × 6 colunas em uma máquina Windows x64 (8 núcleos lógicos, 7,8 GB de RAM, Python 3.12).
| Tarefa | Método | Mediana | Memória de pico |
|---|---|---|---|
| Leitura | pandas (calamine) | 294 ms | 108,2 MB |
| Leitura | Spire.XLS | 1.456 ms | 312,2 MB |
| Leitura | openpyxl read_only
|
1.704 ms | 43,9 MB |
| Leitura | pandas (mecanismo openpyxl) | 2.177 ms | 91,9 MB |
| Gravação | XlsxWriter | 1.744 ms | 118,8 MB |
| Gravação | pandas → xlsxwriter | 3.477 ms | 118,2 MB |
| Gravação | openpyxl write_only
|
3.803 ms | 79,4 MB |
| Gravação | Spire.XLS InsertArray (por coluna) |
3.987 ms | 325,2 MB |
| Gravação | pandas → openpyxl | 5.205 ms | 173,6 MB |
O XlsxWriter é o gravador mais rápido, o pandas com calamine é o leitor mais rápido, e o modo somente gravação do openpyxl usa a menor memória. Essas ferramentas especializadas continuam sendo a melhor escolha para vazão bruta; o Spire.XLS é a opção quando um fluxo de trabalho precisa de várias tarefas de Excel. Seus números de leitura, gravação e memória estão na tabela acima. O motivo para escolhê-lo é a cobertura, não a vazão. Esses números vêm de uma única máquina e de uma única carga de trabalho, portanto, trate-os como referência e não como classificação.
Implantação e compatibilidade
Nenhuma das quatro bibliotecas precisa do Microsoft Office. O Excel foi instalado em nossa máquina de teste apenas para abrir os arquivos gerados para validação; nenhuma conversão iniciou um processo do Excel. Todas as quatro foram executadas no Python 3.14.6.
| pandas | openpyxl | XlsxWriter | Spire.XLS | |
|---|---|---|---|---|
| Tamanho da instalação | 45 MB (+ numpy 25 MB) | 1,8 MB | 1,6 MB | 70,6 MB |
| Importação a frio | 788 ms | 524 ms | 230 ms | 1.027 ms |
O Spire.XLS tem uma instalação maior, de 70,6 MB, embora o pacote do pandas seja comparável quando o numpy é incluído. Para imagens de contêiner e inicializações a frio, pese isso em relação aos pacotes que ele pode substituir em um fluxo de trabalho de várias etapas.
Atualizações contínuas e manutenção do produto
A equipe de produto do Spire.XLS confirma uma cadência de lançamentos mensais para a linha de produtos. Para o pacote Python, o registro do PyPI mostra lançamentos regulares em 2026: 16.2.0 (5 de fevereiro), 16.4.0 (8 de abril), 16.5.0 (7 de maio), 16.6.0 (18 de junho), 16.7.1 (17 de julho) e 16.8.2 (25 de agosto). A versão 16.8.2 adicionou suporte à função de fórmula TEXTSPLIT e corrigiu problemas relacionados a OFD, de acordo com as notas de versão oficiais. O pacote Python segue a mesma linha de lançamento; consulte as notas de versão da versão que você planeja implantar.
Suporte técnico e recursos para desenvolvedores
O Spire.XLS for Python vem com documentação de API, exemplos de código, tutoriais, um fórum de desenvolvedores e suporte por e-mail. As licenças comerciais incluem um ano de atualizações gratuitas e suporte técnico, nos termos da licença. As metas de resposta dependem do tipo de licença. De acordo com a página de suporte pago deste produto, as licenças Developer OEM, Site e Small Business indicam 48 horas úteis, a Site OEM indica 24 horas úteis, e os níveis Gold e Platinum oferecem resposta em 24 horas com suporte especializado. Confirme os termos atuais da sua licença na página de suporte antes de comprar.
Para implantações de produção e empresariais, o suporte faz parte dos critérios de seleção: um caminho de escalonamento definido, metas de resposta documentadas por nível de licença e tratamento prioritário nos níveis superiores. As bibliotecas de código aberto contam com fóruns da comunidade e rastreadores de problemas para a mesma classe de problema.
Além da cobertura de API, uma biblioteca comercial também é uma relação de manutenção. O Spire.XLS for Python é mantido ativamente, com lançamentos regulares que adicionam funcionalidades e resolvem problemas relatados. Os usuários licenciados recebem atualizações e suporte técnico de acordo com os termos de sua licença, e os níveis de suporte superiores oferecem metas de resposta mais rápidas e tratamento prioritário.
Spire.XLS gratuito vs. avaliação vs. comercial
O Spire.XLS vem em três formas com limites diferentes. Escolha de acordo com o que você precisa verificar.
| Edição | Versão | Limites | Ideal para |
|---|---|---|---|
| Free Spire.XLS | 14.12.4 | .xlsx ilimitado; .xls limitado a 5 planilhas × 200 linhas; PDF limitado a 3 páginas; sem marca d'água | Verificar leitura/gravação de xlsx e relatórios pequenos |
| Avaliação do Spire.XLS | 16.8.2 | Planilha de aviso de avaliação e marca d'água em PDF; conversões não relacionadas a imagem limitadas às primeiras 10 páginas | Avaliar a API e conversões de 10 páginas ou menos |
| Comercial | 16.8.2 | Nenhum dos limites acima (consulte o contrato de licença) | Produção |
Nos testes de avaliação e do Free, a leitura e a gravação de xlsx não foram limitadas por linhas ou planilhas. De acordo com as notas de limitação do fornecedor, a exportação de imagem não é afetada pelo limite de 10 páginas. Um detalhe prático: após a edição Free salvar um arquivo .xls, a pasta de trabalho na memória é truncada, portanto recarregue a origem se precisar salvar os dois formatos.
O que uma licença comercial oferece?
Uma licença comercial acrescenta uma relação de atualização e suporte sobre a API. Ela inclui:
- um ano de atualizações gratuitas
- um ano de suporte técnico gratuito
- tempos de resposta que dependem do tipo de licença
- resposta em 24 horas e suporte especializado nos níveis Gold e Platinum
- consulta técnica pré-compra por e-mail e no fórum
Qual biblioteca Excel para Python se encaixa no seu projeto?
Adeque a biblioteca ao número de tarefas que seu pipeline precisa executar.
- Apenas leitura de dados: use pandas com calamine.
- Apenas geração de novos relatórios: use XlsxWriter.
- Apenas edição de modelos existentes: use openpyxl.
- Duas ou mais necessidades avançadas (vários formatos, recálculo, conversão, criptografia, tabelas dinâmicas): considere o Spire.XLS, que também traz uma cadência de lançamentos mantida e um canal de suporte do fornecedor.
A regra que usamos: conte as tarefas, não os recursos. Uma tarefa pede uma ferramenta especializada. Duas tarefas são o momento de começar a considerar uma biblioteca integrada, e três ou mais em um único pipeline são onde ela claramente se paga. Se você está na fronteira, execute seus arquivos reais por ambas as abordagens. Lembre-se de que os resultados de fidelidade são específicos para os arquivos testados, e objetos complexos devem sempre ser verificados em suas próprias pastas de trabalho.
Pronto para experimentar em seus próprios arquivos? Baixe o Free Spire.XLS for Python ou a edição de avaliação, e leia a documentação do Spire.XLS for Python para ver como o fluxo de trabalho acima se aplica ao seu projeto.
Perguntas frequentes
Qual biblioteca Python consegue ler e gravar Excel sem o Microsoft Office?
Todas as quatro bibliotecas aqui funcionam sem o Office. pandas (via calamine ou openpyxl) lê, XlsxWriter grava, openpyxl lê e grava .xlsx/.xlsm, e Spire.XLS lê e grava muitos formatos. Em nosso teste, o Excel foi usado apenas para verificar os arquivos de saída.
pandas vs openpyxl: qual devo usar?
Use pandas para carregar dados tabulares para análise, e openpyxl para alterar uma pasta de trabalho mantendo sua estrutura. O pandas reescreve o arquivo ao salvar, portanto objetos como gráficos e tabelas dinâmicas não são mantidos. O openpyxl os mantém nos cenários que testamos.
O openpyxl consegue editar uma pasta de trabalho sem perder gráficos ou tabelas dinâmicas?
Em nossa pasta de trabalho de teste, sim: gráficos, imagens, formatação condicional, validação de dados e partes de tabela dinâmica foram mantidos e o Excel abriu o arquivo normalmente. Formas além de nossas fixtures, e VBA (que requer keep_vba=True), não foram cobertos, portanto teste seus próprios arquivos.
Como converter Excel para PDF em Python sem o Excel instalado?
Use uma biblioteca que renderize as pastas de trabalho por conta própria. Com o Spire.XLS, defina a orientação paisagem e FitToPagesWide/FitToPagesTall, depois salve com FileFormat.PDF. A edição de avaliação limita a saída em PDF a 10 páginas e adiciona uma marca d'água.
Estas bibliotecas são gratuitas para uso comercial?
pandas, openpyxl e XlsxWriter são de código aberto. Spire.XLS é um produto comercial com uma edição Free (xlsx sem restrições; .xls 5 planilhas × 200 linhas; PDF 3 páginas) e uma edição de avaliação. Verifique cada licença para o seu caso de uso.
Qual biblioteca suporta .xls, .xlsb e .ods?
pandas com o mecanismo calamine lê todos os três. O openpyxl não os suporta, e o XlsxWriter só grava .xlsx. O Spire.XLS lê e grava xls, xlsb e ods, embora você deva testar sua saída xlsb e ods com seus próprios leitores downstream.
Como testamos
Testamos em 2 de novembro de 2026 com pandas 3.1.0, openpyxl 3.1.5, XlsxWriter 3.3.1 e Spire.XLS for Python 16.8.2 (avaliação), além de Free Spire.XLS 14.12.4 para os limites das edições. O hardware era Windows x64 com 8 núcleos lógicos e 7,8 GB de RAM. O ambiente de execução era Python 3.12.13, com 3.14.6 usado para verificar compatibilidade.
As fixtures de recursos eram uma pasta de trabalho de três planilhas com 20 linhas, fórmulas, gráficos, imagens, formatação condicional, validação de dados, células mescladas, painéis congelados e filtros, além de uma fixture separada de tabela dinâmica. O desempenho usou 50.000 linhas × 6 colunas (1,18 MB), uma execução de aquecimento descartada, cinco execuções medidas e a mediana, com cada operação em um processo separado. A gravação em massa do Spire é orientada por colunas, portanto seu benchmark usou seis chamadas InsertArray em vez de uma inserção bidimensional. O Microsoft Excel 16.0 foi usado apenas para abrir os arquivos gerados e contar gráficos e tabelas dinâmicas.
Não coberto: VBA, segmentações de dados, Power Query, arquivos com milhões de linhas, concorrência e execuções em Linux ou macOS. O benchmark é de máquina única e carga de trabalho única, com alguma carga de CPU em segundo plano de 12–22%. Os detalhes de manutenção e suporte vêm de páginas públicas oficiais e registros do PyPI, não de nossos testes.