# Stream Excel

O **Stream Excel** lê um arquivo local de Excel linha por linha em uma estrutura JSON e dispara *subpipelines* para processar cada linha. Esse recurso costuma ser indicado em situações nas quais há a necessidade de processamento de arquivos grandes.

## Parâmetros

Dê uma olhada nos parâmetros de configuração do componente:

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th width="307">Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>File Name</strong> <code>(DB)</code></td><td>Determina o nome ou <em>full file path</em> (ex.: tmp/processed/file.txt) do arquivo local que será lido.</td><td>file.xlsx</td><td><em>String</em></td></tr><tr><td><strong>Sheet Name</strong></td><td>Nome da planilha de Excel a ser lida.</td><td>Plan1</td><td><em>String</em></td></tr><tr><td><strong>Sheet Index</strong></td><td><em>Index</em> da planilha de Excel a ser lida.</td><td>N/A</td><td>Inteiro</td></tr><tr><td><strong>Use Sheet Index Instead Of Name</strong></td><td>Se ativada, a opção permite que o <em>index</em> da planilha seja informado no lugar do nome.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Max Fractional Digits</strong></td><td>Determina o número preciso de dígitos fracionários em uma célula numérica no momento da leitura do arquivo Excel.</td><td>5</td><td>Inteiro</td></tr><tr><td><strong>Read Specific Columns As String</strong></td><td>Indica quais colunas o componente deve ler em forma de <em>string</em> ao invés do seu formato original. Cada coluna desejada deve ser informada separadamente por uma vírgula (ex.: A,B,X,AA).</td><td>B,D,F</td><td><em>String</em></td></tr><tr><td><strong>Read All Columns As String</strong></td><td>Se selecionada, a opção fará com que todas as colunas sejam lidas como <em>string</em>.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Column Identifier</strong></td><td>Em caso de erros, esta é a coluna que será enviada ao sub-processo <em>onException</em>.</td><td>A</td><td><em>String</em></td></tr><tr><td><strong>Parallel Execution Of Each Iteration</strong></td><td>Se selecionada, a opção fará com que o componente realize a leitura de linhas do arquivo em paralelo.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Fail On Error</strong></td><td>A ativação desse parâmetro suspende a execução do <em>pipeline</em> apenas quando há uma ocorrência grave na estrutura da iteração, impedindo a sua conclusão por completo. A ativação do parâmetro <strong>Fail On Error</strong> não tem ligação com erros ocorridos nos componentes utilizados para a construção dos <em>subpipelines</em> (<em>onProcess</em> e <em>onException</em>).</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Advanced</strong></td><td>Quando selecionada, a opção solicita a definição de parâmetros avançados.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Skip</strong></td><td>Número de linhas a serem puladas antes da leitura do arquivo.</td><td>N/A</td><td>Inteiro</td></tr><tr><td><strong>Limit</strong></td><td>Número máximo de linhas a serem lidas.</td><td>N/A</td><td>Inteiro</td></tr></tbody></table>

O **Stream Excel** realiza processamento em lote, o que significa processar os dados de forma contínua e controlada em lotes menores.

{% hint style="info" %}
O **Stream Excel** não é capaz de ler arquivos no formato .xls, mas apenas no formato .xlsx.
{% endhint %}

## Fluxo de Mensagens <a href="#fluxo-de-mensagens" id="fluxo-de-mensagens"></a>

### Entrada <a href="#entrada" id="entrada"></a>

O componente aceita qualquer mensagem de entrada, podendo utilizá-la por meio de *Double Braces*.

### Saída <a href="#sada" id="sada"></a>

O componente retorna um JSON contendo o total de execuções, total de sucesso e total de falhas.

* **sem erro**

```
{
    "total": 5,
    "success": 5,
    "failed": 0
}
```

* **com erro**

```
{
    "total": 5,
    "success": 3,
    "failed": 2
}
```

* **Total:** número total de linhas processadas.
* **Success:** número total de linhas processadas com sucesso.
* **Failed:** número total de linhas cujo processamento falhou.

{% hint style="info" %}
Para saber se uma linha foi processada corretamente, deve haver o retorno `{ "success": true }` para cada linha processada.
{% endhint %}

O componente joga uma exceção se o arquivo não existir ou não puder ser lido. Do contrário, uma mensagem é produzida na saída com a exceção ocorrida.

Você também pode encontrar um erro ao fazer o upload de um arquivo .xlsx no Google Drive e, em um *pipeline*, usar o componente **Google Drive** para fazer o download e o componente **Stream Excel** para ler este arquivo.

Quando você faz essa ação, um comportamento inesperado do Google Sheets altera o arquivo .xlsx. Isso faz com que o **Stream Excel** leia todas as linhas da planilha (incluindo aquelas em branco) ao invés de ler apenas as linhas com conteúdo. Este comportamento não está relacionado com a Digibee Integration Platform.

Como solução alternativa, você pode copiar o conteúdo da planilha e colar em uma nova guia no mesmo arquivo .xlsx. Se você fizer esse procedimento, não copie as linhas em branco ou o mesmo erro irá ocorrer.

A manipulação de arquivos dentro de um *pipeline* ocorre de forma protegida. Todos os arquivos podem ser acessados apenas por um diretório temporário, no qual cada *pipeline key* dá acesso ao seu próprio conjunto de arquivos.

## Stream Excel em ação

Abaixo será demonstrado como o componente se comporta em determinada situação e a sua respectiva configuração.

### Ler arquivo de Excel e analisar resultado

Para esse exemplo, vamos considerar que já possuímos um arquivo Excel no fluxo do *pipeline* que foi baixado através de componentes como: [**Google Drive**](/documentation/connectors-and-triggers/pt-br/connectors/file-storage/google-drive.md), [**OneDrive**](/documentation/connectors-and-triggers/pt-br/connectors/file-storage/onedrive.md) e assim por diante. O arquivo em questão possui uma planilha com os nomes dos 100 bilionários selecionados pela Forbes.

O componente **Stream Excel** será configurado da seguinte forma:

* **File Name:** file.xlsx
* **Sheet Name:** Plan1
* **Use Sheet Index Instead of Name:** desativado
* **Max Fractional Digits:** 5
* **Read Specific Columns As String:** B,D,F
* **Read All Columns As String:** desativado
* **Column Identifier:** A
* **Parallel Execution of Each Iteration:** desativado
* **Fail On Error:** desativado
* **Advanced:** desativado

#### **Entrada**

```
{
"fileName": "sheets.xlsx"
}
```

#### **Saída**

```
{
"total": 102,
"success": 0,
"failed": 102
}
```

#### **Resultado do log**

Para visualizar esse *log*, será utilizada a aba de **Mensagens** do *pipeline*. Conforme demonstrado na imagem abaixo, todas as linhas da planilha foram lidas individualmente pelo componente, incluindo até o nome das colunas.

<figure><img src="https://lh4.googleusercontent.com/5Y91LjptJR4okSCt_P2b6R7mdULdExZCwUW2kyXJwBipJZFwKa7qbWzje-c0Zw-J5lLEYPWfjj6UCg46u-DaTEUUUPC2l4u1BK6GJ2f9bCPKx8PPIFObYyptQq703gApRtIcBRxvveVhg1LP3qVChpE" alt=""><figcaption></figcaption></figure>

### Ler arquivo de Excel e analisar uma planilha inexistente no arquivo

Para esse exemplo, considere a mesma planilha analisada anteriormente. No entanto, será selecionada uma planilha que não existe.

O componente **Stream Excel** irá retornar a seguinte mensagem de erro (**Fail On Error** está desativado):

```
{
"success": false,
"message": "Sheet 'InvalidSheetName' does not exist",
"exception": "com.monitorjbl.xlsx.exceptions.MissingSheetException"
}
```

### **Ler arquivo de Excel inválido**

Para esse exemplo, considere um arquivo inexistente no fluxo do *pipeline*.

O componente **Stream Excel** irá retornar a seguinte mensagem de erro (**Fail On Error** está desativado):

```
{
"success": false,
"message": "File invalidsheets.xlsx does not exist.",
"exception": "com.digibee.pipelineengine.exception.PipelineEngineRuntimeException"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/files/stream-excel.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
