Script que baixa uma tabela de um documento Google Docs, salva os dados como CSV e os transforma em um grid de texto (arte ASCII) usando coordenadas X/Y.
- Como funciona
- Dependências
- Como usar
- Gerador de tabela (engenharia reversa)
- Funções
- Fluxo do programa
- Exemplo de saída
- Como publicar a tabela no Google Docs
- Para quem vai usar o script
O documento Google Docs contém uma tabela em que cada linha representa um caractere com sua posição:
x-coordinate: coluna (horizontal) onde o caractere deve ser desenhadoy-coordinate: linha (vertical) onde o caractere deve ser desenhadoCharacter: o caractere a ser desenhado na posição
O script baixa essa tabela, salva em table.csv e reconstrói a imagem como texto em rendered.txt.
Instale as dependências listadas em requeriments.txt:
pip install -r requeriments.txtPrincipais bibliotecas usadas:
requests— baixa o documento do Google Docspandas— parsing do HTML, manipulação de tabelas e CSVlxml— parser de HTML usado pelopandas.read_html
python render_google_docs.pyO programa pede a URL do documento Google Docs:
This program downloads a table from a Google Docs document and renders it as text.
Enter the Google Docs URL: https://docs.google.com/document/d/...
Também é possível passar a URL diretamente como argumento:
python render_google_docs.py "https://docs.google.com/document/d/..."O script aceita três formatos de link:
- Publicado para a web:
https://docs.google.com/document/d/e/{ID}/pub - Compartilhado (documento):
https://docs.google.com/document/d/{ID}/edit... - Compartilhado (planilha):
https://docs.google.com/spreadsheets/d/{ID}/edit...
Ao final, dois arquivos são gerados no diretório atual:
| Arquivo | Conteúdo |
|---|---|
table.csv |
Tabela baixada do documento |
rendered.txt |
Texto renderizado a partir das coordenadas X/Y |
O generate_table.py faz o caminho inverso do render_google_docs.py: em vez de transformar coordenadas em texto, ele transforma texto em coordenadas, gerando um table.csv no mesmo formato — pronto para ser colado em um documento Google Docs.
python generate_table.py "SUAS PALAVRAS AQUI"
# ou de forma interativa:
python generate_table.pyGera table.csv e rendered.txt no diretório atual.
- Fonte bitmap de 7 linhas de altura (definida em
font.json), no mesmo estilo█/░, com suporte aA–Z,0–9, espaço e pontuação básica (',.,,,!,?). - Cada letra é um glifo de pixels; os glifos são empilhados lado a lado com 1 coluna de separação entre letras.
text_to_grid(texto)— converte o texto em uma gradealtura × largura.grid_to_csv(grade)— grava cada célula preenchida como uma linhax,caractere,y, com o cabeçalho0,1,2/x-coordinate,Character,y-coordinate.render_to_file()— reaproveita orender()dorender_google_docs.pypara gerar também orendered.txt.
flowchart LR
A[Texto do usuário] --> B[Fonte bitmap 7 linhas █/░]
B --> C[Glifos lado a lado]
C --> D[text_to_grid]
D --> E[grid_to_csv]
E --> F[table.csv]
F --> G[render_google_docs.py render]
G --> H[rendered.txt]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
espaço ' . , ! ?
Baixa a tabela do documento Google Docs.
- Extrai o ID do documento analisando os segmentos da URL com
urlparse:- URLs no formato
.../document/d/{id}/editusam o export em HTML:https://docs.google.com/document/d/{id}/export?format=html - URLs no formato
.../document/d/e/{id}/pubusam a versão publicada:https://docs.google.com/document/d/e/{id}/pub - Formatos não reconhecidos levantam
ValueError
- URLs no formato
- Faz
requests.getno HTML e interpreta as tabelas compd.read_html - Retorna a tabela de índice
table(padrão0) ou levantaIndexErrorse o índice não existir
Salva o DataFrame em um arquivo CSV.
Lê o CSV gerado e retorna um DataFrame. Lança FileNotFoundError se o arquivo não existir.
Converte o DataFrame de coordenadas em texto:
- Se a primeira célula for
x-coordinate, usa a primeira linha como cabeçalho - Normaliza os nomes das colunas (minúsculas e
-vira_):x_coordinate,y_coordinate,character - Cria uma grade de tamanho
largura = max(x) + 1poraltura = max(y) + 1preenchida com espaços - Insere cada caractere na posição
(x, y) - Junta as linhas em uma única string
Salva o texto renderizado em um arquivo.
Orquestra o fluxo completo: baixa → salva CSV → carrega → renderiza → salva texto. A URL é lida de um argumento de linha de comando ou solicitada via prompt.
flowchart TD
A[Usuário insere URL do Google Docs] --> B[download url]
B --> C{Valida segmentos da URL}
C -- "/d/e/..." --> D["Publicado: /d/e/{id}/pub"]
C -- "/d/{id}/edit..." --> E["Export HTML: /d/{id}/export?format=html"]
C -- "/spreadsheets/d/..." --> P["Planilha: gviz/tq?tqx=out:html&gid=0"]
C -- outro --> F[raise ValueError]
D --> G[requests.get HTML]
E --> G
P --> G
G --> H[pd.read_html header=0]
H --> I[Seleciona tabela table=0]
I --> J[save table.csv]
J --> K[load table.csv]
K --> L[render grade X/Y]
L --> M[save_rendered_text rendered.txt]
M --> N[Arquivos gerados]
Dado o table.csv gerado, rendered.txt contém a imagem reconstruída:
█████░ ██████░ █████░ █████░ ██░ ██████░ ██░ ██░ █████░
██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░
██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░
██░ ██░ █████░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██████░
██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░
██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░ ██░█░ ██░ ██░
█████░ ██░ █████░ █████░ ██████░ ██████░ ███░ ██░ ██░
Depois de gerar o table.csv com o generate_table.py, siga os passos abaixo para levá-lo ao Google Docs.
- Abra o Google Drive.
- Faça o upload do seu arquivo
.CSV. - Clique com o botão direito no arquivo enviado e escolha Abrir com > Google Planilhas.
- Selecione todas as células da tabela com dados (incluindo o cabeçalho) e pressione
Ctrl + C(ouCmd + Cno Mac) para copiar.
- Crie um novo documento no Google Docs.
- Adicione o texto superior se necessário (ex: "The table below contains the input data...").
- Pressione
Ctrl + V(ouCmd + V) para colar. - O Google Docs perguntará como deseja colar:
- Escolha "Colar sem link" (Paste unlinked) para que os dados fiquem fixos diretamente no documento.
- A tabela será criada automaticamente com as colunas e linhas delimitadas com bordas pretas.
Confira a estrutura da tabela no documento: linha 1 = 0,1,2, linha 2 = x-coordinate,Character,y-coordinate, seguida dos dados.
Para que outra pessoa consiga usar o render_google_docs.py com o seu documento:
- Publicado para a web: no Docs,
File > Share > Publish to web > Publish→ linkhttps://docs.google.com/document/d/e/{ID}/pub. - Compartilhado com o link:
File > Share > Share→ opção "Anyone with the link can view" → linkhttps://docs.google.com/document/d/{ID}/edit.
Os dois formatos são aceitos pelo render_google_docs.py.
A pessoa precisa receber os arquivos render_google_docs.py, generate_table.py e requeriments.txt, instalar as dependências e rodar:
pip install -r requeriments.txt
python render_google_docs.pyEm seguida, basta colar o link compartilhado. Os arquivos table.csv e rendered.txt serão gerados no diretório atual.