Slide 25 de 37

Planilhas

proc main(): void {
	sheets := using "./ledger.xlsx" as xlsx
	if sheets is Result.Ok(tables) {
		if tables bounds 0 {
			echo len(tables[0])
		}
	} else if sheets is Result.Error(err) {
		echo "ainda sem planilha: {err.message}"
	}
}
using lê mais do que um CSV. as xlsx e as ods leem cada um uma planilha inteira e respondem com um Result<Table[dyn], hive.TableError> — uma Table por aba, na ordem do documento, então uma aba vazia é uma Table vazia em vez de uma ausente. Os dois leitores não têm dependências. Uma célula de xlsx chega como o arquivo a guarda, com uma exceção: uma data é guardada internamente como uma contagem de dias, então o formato de número da própria célula é consultado para pegar exatamente essas e renderizá-las como uma data de verdade. Um ods já guarda datas de verdade, então nada ali precisa ser desfeito.