> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doconda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo generar un Excel desde Gemini en Vertex AI

> Declara doconda.tools() como funciones de Gemini en Vertex AI: el modelo crea un .xlsx con fórmulas reales y te da el enlace.

Instala `google-genai` y `doconda` (o el AI SDK con `@ai-sdk/google-vertex`) y declara `doconda.tools()` como funciones
de Gemini. Cuando pides una hoja de cálculo, Gemini llama a `create_document` con `format: "xlsx"` y recibes un Excel
con fórmulas reales y su PDF, con sus enlaces de descarga.

## Pasos

1. Autentícate en Google Cloud (`gcloud auth application-default login` o una cuenta de servicio) y ten un proyecto con
   Vertex AI activado.
2. Guarda tu API key de Doconda (panel → **API keys**) en `DOCONDA_API_KEY`.
3. Declara las herramientas y ejecuta el bucle: mientras Gemini pida funciones, las ejecutas y le devuelves el resultado.

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  # pip install google-genai doconda
  from doconda import Doconda
  from google import genai
  from google.genai import types

  client = genai.Client(vertexai=True, project="mi-proyecto", location="europe-west1")
  tools = Doconda().tools()
  config = types.GenerateContentConfig(
      tools=[types.Tool(function_declarations=[
          types.FunctionDeclaration(name=t.name, description=t.description, parameters_json_schema=t.input_schema) for t in tools
      ])]
  )
  contents = [types.Content(role="user", parts=[types.Part.from_text(text="Hazme un Excel con el presupuesto del evento")])]

  while True:
      res = client.models.generate_content(model="gemini-3.5-flash", contents=contents, config=config)
      if not res.function_calls:
          break
      contents.append(res.candidates[0].content)
      parts = [
          types.Part.from_function_response(name=c.name, response={"result": next(t for t in tools if t.name == c.name).run(dict(c.args or {}))})
          for c in res.function_calls
      ]
      contents.append(types.Content(role="user", parts=parts))

  print(res.text)
  ```

  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  // npm install ai @ai-sdk/google-vertex @doconda/sdk
  import { createVertex } from "@ai-sdk/google-vertex"
  import { generateText, isStepCount, jsonSchema, tool } from "ai"
  import { Doconda } from "@doconda/sdk"

  const vertex = createVertex({ project: "mi-proyecto", location: "europe-west1" })
  const doconda = new Doconda()
  const tools = Object.fromEntries(
    doconda.tools().map((t) => [
      t.name,
      tool({ description: t.description, inputSchema: jsonSchema(t.inputSchema), execute: (input) => t.run(input as Record<string, unknown>) }),
    ]),
  )

  const { text } = await generateText({
    model: vertex("gemini-3.5-flash"),
    tools,
    stopWhen: isStepCount(5),
    prompt: "Hazme un Excel con el presupuesto del evento",
  })

  console.log(text)
  ```
</CodeGroup>

`parameters_json_schema` (`parametersJsonSchema` en `@google/genai`) acepta el JSON Schema de cada herramienta tal cual.

## Qué devuelve

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "id": "doc_01JAB3…",
  "format": "xlsx",
  "status": "ready",
  "links": { "xlsx": "https://…", "pdf": "https://…" },
  "links_note": "Links expire in 5 minutes: call get_document for fresh ones."
}
```

* Un Excel con fórmulas reales (no números copiados), con los supuestos en sus propias celdas, y su PDF.
* `status`: `ready`, `ready_with_warnings`, `needs_review` o `failed` (no se cobra).
* Los enlaces caducan a los 5 minutos; el agente pide otros con `get_document`.

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿Funciona con la API de Gemini sin Vertex AI?">
    Sí, es el mismo código sin `vertexai=True`. Ver la guía de [Gemini](/agents/gemini).
  </Accordion>

  <Accordion title="¿Puedo darle mis datos para el Excel?">
    Sí. Sube tus ficheros con `upload_file` y el agente los pasa como fuentes (hasta 5 documentos: Word, PowerPoint,
    Excel, PDF, TXT o Markdown).
  </Accordion>

  <Accordion title="¿Dónde se procesan los datos?">
    Los documentos y ficheros se guardan en la Unión Europea (Irlanda), y la IA que los procesa también funciona en la UE.
  </Accordion>

  <Accordion title="¿Cuánto cuesta?">
    Pagas por documento entregado; los que fallan no se cobran. Ver [precios](/guides/account#precios).
  </Accordion>
</AccordionGroup>

## Sigue leyendo

* [Google Vertex AI](/agents/vertex): la guía completa, también con `@google/genai`.
* [Quickstart](/quickstart).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.