Versões comparadas
Chave
- Esta linha foi adicionada.
- Esta linha foi removida.
- A formatação mudou.
O que é?
Classe responsável por auxiliar a printer.exe
na geração de arquivos .xlsx. Esta classe faz o processo de escrever o arquivo intermediário com as instruções a serem convertidas e que gerarão o arquivo .xlsx.
Aviso |
---|
O recurso depende primariamente da Classe disponível na lib com label igual ou superior a |
Métodos
New()
Cria a instância de um objeto da classe FwPrinterXlsx
.
Permite a configuração se deve excluir o arquivo auxiliar .rel
de construção da planilha .xlsx
.
Sintaxe: FwPrinterXlsx():New(lDelBase) → objeto FwPrinterXlsx
Parâmetros:
Nome
Tipo
Obrigatório
Default
Referência
Descrição
Caso seja utilizada versão anterior será lançada uma exceção
Obs.: O binário da printer precisa estar atualizado no servidor e também no cliente, pois conforme condições, a impressão pode utilizar um ou outro. |
Aviso |
---|
Classe disponível na lib com label igual ou superior a |
Métodos
New()
Cria a instância de um objeto da classe FwPrinterXlsx
.
Permite a configuração se deve excluir o arquivo auxiliar .rel
de construção da planilha .xlsx
.
Sintaxe: FwPrinterXlsx():New(lDelBase) → objeto FwPrinterXlsx
lDelBase
.xlsx
Exemplo:
Bloco de código | ||
---|---|---|
| ||
local oFwXlsx := FwPrinterXlsx():New() |
Activate()
Prepara o objeto para realizar a escrita do arquivo base. O resultado do método indica se conseguiu preparar com sucesso o arquivo base.
Permite a configuração do objeto utilizado na escrita considerando como base a classe FwFileWriter
.
Sintaxe: FwPrinterXlsx():Activate(cFile, oFile) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
cFile
lDelBase |
Lógico |
oFile
FwFileWriter()
.F. | indica se deve apagar o arquivo base após o comando para geração do .xlsx |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
local oFwXlsx := FwPrinterXlsx():New() |
Activate()
Prepara o objeto para realizar a escrita do arquivo base. O resultado do método indica se conseguiu preparar com sucesso o arquivo base.
Permite a configuração do objeto utilizado na escrita considerando como base a classe FwFileWriter
.
Sintaxe: FwPrinterXlsx():Activate(cFile, oFile) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
cFile | caractere | x | caminho do arquivo para o .rel e .xlsx final | ||
oFile | objeto | objeto FwFileWriter() | x | objeto para realizar a escrita dos comandos no arquivo base |
Bloco de código | ||
---|---|---|
| ||
Bloco de código | ||
| ||
local cPath := "\spool\" // /spool/ para uma geração no server local cArquivo := cPath + "xls_class_rel.rel" lRet := oXlsx:Activate(cArquivo) // informando o FwFileWriter // oFileW := FwFileWriter():New(cFilename) // lRet := oXlsx:Activate(cFilename, oFileW) |
Aviso | ||
---|---|---|
| ||
Informe caminhos de diretórios completos (a partir do cliente ou do rootpath) para não ter comportamentos inesperados com a execução da printer no final. Prefira o uso de diretório e nomes de arquivos como: |
toXlsx()
Faz a criação do arquivo .xlsx depois de ter completado o preenchimento e configuração das informações na classe.
Sintaxe: FwPrinterXlsx():toXlsx() → nil
Bloco de código | ||
---|---|---|
| ||
lRet := oFwXlsx:Activate(cGenFile) oFwXlsx:toXlsx() cGenFile := StrTran(cGenFile, ".rel", ".xlsx") if file(cGenFile) CpyS2T(cGenFile, cDestFile) else // arquivo não gerado endif |
Aviso | ||
---|---|---|
| ||
Fica sob responsabilidade do programa/código cliente verificar se o arquivo foi .xlsx gerado onde desejado e eventualmente mover para um destino desejado como a máquina da pessoa ou diretório compartilhado. |
EraseBaseFile()
Exclui o arquivo base .rel gerado com uma instância da classe FwPrinterXlsx.
Sintaxe: FwPrinterXlsx():EraseBaseFile() → nil
DeActivate()
Remove os elementos preparados com a criação e escrita do arquivo no Activate.
Sintaxe: FwPrinterXlsx():DeActivate() → nil
Destroy()
Remove os recursos conhecidos que prendem memória em múltiplas execuções da classe.
Sintaxe: FwPrinterXlsx():Destroy() → nil
SetFont()
Faz a indicação da fonte para ser utilizada nas novas atribuições de conteúdos que acontecer nas células.
Sintaxe: FwPrinterXlsx():SetFont(cFont, nSize, lItalic, lBold, lUnderlined) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
cFont | caractere | x | código da fonte - Utilize a classe FwPrinterFont como referência | ||
nSize | numérico | x | tamanho da fonte | ||
lItalic | lógico | x | deve exibir em itálico? | ||
lBold | lógico | x | deve exibir em negrito? | ||
lUnderlined | lógico | x | deve exibir sublinhado? |
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
// cFont := FwPrinterFont():getFromName("Calibri") cFont := FwPrinterFont():Calibri() nSize := 14 lItalic := .T. lBold := .T. lUnderlined := .T. // Comando 'Fonte' com Calibri 14, itálico, negrito e sublinhado lRet := oXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) |
ResetFont()
Redefine a fonte padrão para uma planilha.
A fonte padrão é Calibri, tamanho 11 e sem itálico, sem negrito e sem sublinhado.
Sintaxe: FwPrinterXlsx():ResetFont() → lRet
SetFontConfig()
Faz a indicação definição de uma fonte através de um objeto de configuração.
Facilita os casos de troca repetida de fontes, permitindo ter um objeto pré configurado com as características desejadas. Internamente é utilizado o método setFont
com os parâmetros distribuídos.
O objeto de configuração é o retorno do método estático da classe FwXlsxPrinterConfig:MakeFont()
.
Sintaxe: FwPrinterXlsx():SetFontConfig(jFont) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
jFont | objeto JsonObject | x | configuração configuração com as propriedades para fontes [
|
Exemplo:
Bloco de código | ||
---|---|---|
| ||
jFontItalic := FwXlsxPrinterConfig():MakeFont() jFontItalic['italic'] := .T. jFontBold := FwXlsxPrinterConfig():MakeFont() jFontBold['bold'] := .T. lRet := self:oPrintXlsx:SetFontConfig(jFontItalic) // escreve no arquivo lRet := self:oPrintXlsx:SetFontConfig(jFontBold) // escreve novamente no arquivo |
SetColumnsWidth()
Atribui
SetRowsHeight()
SetCellsFormat()
ResetCellsFormat()
SetCellsFormatConfig()
MergeCells()
SetBorder()
ResetBorder()
SetBorderConfig()
ApplyFormat()
AddSheet()
SetValue()
SetText()
SetNumber()
SetFormula()
SetDate()
SetDateTime()
SetHyperlink()
SetBoolean()
AddImageFromBuffer()
UseImageFromBuffer()
AddImageFromAbsolutePath()
ApplyAutoFilter()
Exemplos
Uso simples
O exemplo a seguir mostra como gerar uma planilha simples.
Define a largura para uma lista de colunas.
O valor da largura segue a especificação de unidade do excel e o valor padrão das colunas é de 8,43
.
Sintaxe: FwPrinterXlsx():SetColumnsWidth(nColFrom, nColTo, nWidth) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nColFrom | numérico | x | determina a partir de qual coluna aplicar o ajuste de largura | ||
nColTo | numérico | x | determina até qual coluna deve aplicar o ajuste de largura | ||
nWidth | numérico | x | determina a nova largura |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
// Largura 23,71
lRet := oXlsx:SetColumnsWidth(5, 10, 23.71) |
SetRowsHeight()
Define a altura para uma lista de linhas.
Este valor segue a especificação de unidade do excel e o valor padrão das linhas é de 15.00
.
Sintaxe: FwPrinterXlsx():SetRowsHeight(nRowFrom, nRowTo, nHeight) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRowFrom | numérico | x | determina a partir de qual linha aplicar o ajuste de altura | ||
nRowTo | numérico | x | determina até qual linha deve aplicar o ajuste de altura | ||
nHeight | numérico | x | determina a nova altura |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
nRowFrom := 26
nRowTo := 30
nHeight := 18.75
// Altura 18,75 nas linhas 26 a 30
lRet := oXlsx:SetRowsHeight(nRowFrom, nRowTo, nHeight) |
SetCellsFormat()
Define a formatação a ser aplicada nas células, aplicando alinhamento, cores e formatação dos valores.
Os alinhamentos de conteúdo possuem classes de apoio para a recuperação dos códigos a serem utilizados. As classes são FwXlsxCellAlignment
, FwXlsxHorizontalAlignment
e FwXlsxVerticalAlignment
.
Os valores para as cores seguem o padrão RGB contudo sem a marcação
Sintaxe: FwPrinterXlsx():SetCellsFormat(cHorAlign, cVertAlign, lTextWrap, nRotDegrees, cTextColor, cBgColor, cCustomFormat)→ lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
cHorAlign | caractere | x | determina o alinhamento horizontal do conteúdo veja: FwXlsxHorizontalAlignment | ||
cVertAlign | caractere | x | determina o alinhamento vertical do conteúdo veja: FwXlsxVerticalAlignment | ||
lTextWrap | lógico | x | deve aplicar quebra de linha? | ||
nRotDegrees | numérico | x | define a rotação do texto em graus 0 - 359 | ||
cTextColor | caractere | x | define a cor para o texto na célula | ||
cBgColor | caractere | x | define a cor de fundo da célula | ||
cCustomFormat | caractere | "" | determina tipo personalizado de formatação do conteúdo |
Exemplo:
Bloco de código |
---|
static oCellHorAlign := FwXlsxCellAlignment():Horizontal()
static oCellVertAlign := FwXlsxCellAlignment():Vertical()
cHorAlignment := oCellHorAlign:Center()
cVertAlignment := oCellVertAlign:Center()
lWrapText := .F.
nRotation := 270
cCustomFormat := ""
// Seta texto vermelho com alinhamento horizontal e vertical centralizado e com rotação de texto vertical
lRet := oXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "FF0000", "FFFFFF", cCustomFormat) |
ResetCellsFormat()
Redefine para a formatação padrão de células.
O padrão das células é alinhamento horizontal e vertical Default sem quebra de texto, sem rotação, texto na cor preta e fundo da célula na cor branca e sem formatação de conteúdo
Sintaxe: FwPrinterXlsx():ResetCellsFormat()→ lRet
SetCellsFormatConfig()
Aplica as configurações de formatação utilizando um objeto com as propriedades necessárias.
Sintaxe: FwPrinterXlsx():SetCellsFormatConfig(jFormat) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
jFormat | objeto JsonObject | x | configuração com as propriedades para fontesFwXlsxPrinterConfig():MakeFormat() |
Exemplo:
Bloco de código |
---|
jFormat := FwXlsxPrinterConfig():MakeFormat()
jFormat['hor_align'] := oCellHorAlign:Center()
jFormat['vert_align'] := oCellVertAlign:Center()
// formatação para todas as células a seguir
lRet := oXlsx:SetCellsFormatConfig(jFormat) |
MergeCells()
Aplica a unificação de um conjunto de células que esteja no intervalo matricial informado (células de - até).
Sintaxe: FwPrinterXlsx():MergeCells(nRowFrom, nColFrom, nRowTo, nColTo) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRowFrom | numérico | x | indica a partir de qual linha aplicar a unificação | ||
nColFrom | numérico | x | indica a partir de qual coluna aplicar a unificação | ||
nRowTo | numérico | x | indica até qual linha aplicar a unificação | ||
nColTo | numérico | x | indica até qual coluna aplicar a unificação |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
nRowFrom := 2
nColFrom := 2
nRowTo := 21
nColTo := 3
// Mescla intervalo B2:C21
lRet := oXlsx:MergeCells(nRowFrom, nColFrom, nRowTo, nColTo) |
SetBorder()
Determina as bordas para as próximas células que receberão conteúdo.
Sintaxe: FwPrinterXlsx():SetBorder(lLeft, lTop, lRight, lBottom, cStyle, cColor)
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
lLeft | lógico | x | deve usar borda à esquerda? | ||
lTop | lógico | x | deve usar borda superior? | ||
lRight | lógico | x | deve usar borda à direita? | ||
lBottom | lógico | x | deve usar borda inferior? | ||
cStyle | caractere | x | define qual o tipo de borda (FwXlsxBorderStyle ) | ||
cColor | caractere | x | define a cor para as bordas |
Exemplo:
Bloco de código |
---|
lTop := .T.
lBottom := .T.
lLeft:= .T.
lRight := .T.
cStyle := FwXlsxBorderStyle():DashDot()
cColor := "008000"
// Borda
lRet := oXlsx:SetBorder(lLeft, lTop, lRight, lBottom, cStyle, cColor) |
ResetBorder()
Redefine para as bordas de células para o padrão.
O padrão das bordas é sem indicação de uso de bordas (falso para os quatro lados), estilo None (não aplica estilo algum) e cor de linha preta.
Sintaxe: FwPrinterXlsx():ResetBorder() → lRet
SetBorderConfig()
Aplica as configurações de borda utilizando um objeto com as propriedades necessárias.
Sintaxe: FwPrinterXlsx():SetBorderConfig(jBorder) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
jBorder | objeto JsonObject | x | configuração com as propriedades para as bordasFwXlsxPrinterConfig():MakeBorder() |
Exemplo:
Bloco de código |
---|
// Bordas para o header
jBorderHeader := FwXlsxPrinterConfig():MakeBorder()
jBorderHeader['top'] := .T.
jBorderHeader['bottom'] := .T.
jBorderHeader['border_color'] := "B1B1B1"
jBorderHeader['style'] := FwXlsxBorderStyle():Double()
lRet := oXlsx:SetBorderConfig(jBorderHeader) |
AddSheet()
Adiciona uma aba à planilha. Este é um dos comandos obrigatórios para a geração de uma planilha.
Sintaxe: FwPrinterXlsx():AddSheet(cSheetName) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
cSheetName | caractere | nil | nome para a aba |
Exemplo:
Bloco de código |
---|
// Nova aba
lRet := oXlsx:AddSheet("Minha Plan2")
// lRet := oXlsx:AddSheet() |
ApplyFormat()
Comando que força a aplicação de uma formatação à célula.
Este comando pode ser usado para atribuir um formato às células e minimizar a quantidade de escrita no arquivo base.
A formatação envolvida são: configuração de bordas, formatação de conteúdo, alinhamento e cor e definição de fonte.
Sintaxe: FwPrinterXlsx():ApplyFormat(nRow, nCol) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | número da linha da célula para aplicar as formatações | ||
nCol | numérico | x | número da linha da célula para aplicar as formatações |
Exemplo:
Bloco de código |
---|
lTop := .T.
lBottom := .T.
lLeft:= .T.
lRight := .T.
cStyle := FwXlsxBorderStyle():DashDot()
cColor := "008000"
// Borda
lRet := oXlsx:SetBorder(lLeft, lTop, lRight, lBottom, cStyle, cColor)
nRow := 12
nCol := 1
// blank - Usado somente para aplicar a formatação
lRet := oXlsx:ApplyFormat(nRow, nCol) |
SetValue()
Atribuição genérica de um valor para a célula conforme os tipos do Advpl, a atribuição é redirecionada internamente para o tipo de atribuição apropriada por exemplo, caractere → setText
e numérico → setNumber
.
Nenhum dos comandos de atribuição de valor aplica a formatação para o tipo, ou seja é necessário que indique o formato que queira exibir o conteúdo na célula antes da atribuição ou então aplique depois de ter atribuído o valor com o método ApplyFormat
para cada uma das células escritas antes.
Sintaxe: FwPrinterXlsx():SetValue(nRow, nCol, xValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
xValue | caractere | data | lógico | numérico | x | valor para atribuição de algum dos tipos: caractere, numérico, data ou lógico de Advpl |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
lRet := oXlsx:SetValue(1, 3, "Mês")
lRet := oXlsx:SetValue(2, 3, 1)
lRet := oXlsx:SetValue(3, 3, .F.)
lRet := oXlsx:SetValue(4, 3, STOD("20200827")) // ficará sem formatação de data
cHorAlignment := oCellHorAlign:Default()
cVertAlignment := oCellVertAlign:Default()
lWrapText := .F.
nRotation := 0
cCustomFormat := "dd-mm-yyyy"
// Seta formato de data dd-mm-yyyy
lRet := oXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat)
lRet := oXlsx:SetValue(5, 3, STOD("20200827")) // terá formatação de data |
SetText()
Atribui um valor de texto a uma célula.
Sintaxe: FwPrinterXlsx():SetText(nRow, nCol, cValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
cValue | caractere | x | texto para atribuição |
SetNumber()
Atribui um valor numérico a uma célula.
Sintaxe: FwPrinterXlsx():SetNumber(nRow, nCol, nValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
nValue | numérico | x | número para atribuição |
SetFormula()
Atribui uma fórmula a uma célula. Esta fórmula não tem sua validade consistida na atribuição.
Sintaxe: FwPrinterXlsx():SetFormula(nRow, nCol, cValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
cValue | caractere | x | fórmula para atribuição |
Exemplo:
SetDate()
Atribui o valor de data do Advpl a uma célula.
Sintaxe: FwPrinterXlsx():SetDate(nRow, nCol, dValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
dValue | data | x | data para atribuição |
SetDateTime()
Atribui o valor de data e hora a uma célula.
Espera que este valor no formato aceito pela printer.exe.
Veja a classe FwXlsxDateFormat
para os detalhes de como gerar o formato da printer para data e hora.
Sintaxe: FwPrinterXlsx():SetDateTime(nRow, nCol, cValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
cValue | caractere | x | valor formatado para atribuição ver: FwXlsxDateFormat():toPrinterFormat() |
Exemplo:
Bloco de código |
---|
cHorAlignment := oCellHorAlign:Default()
cVertAlignment := oCellVertAlign:Default()
lWrapText := .F.
nRotation := 0
cCustomFormat := "dd/mm/yy hh:mm:ss.000"
// Define o formato de data e hora dd/mm/yy hh:mm:ss.000
lRet := oXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat)
nRow := 6
nCol := 3
oXlsxDate := FwXlsxDateFormat():New()
oXlsxDate:SetYear("2019")
oXlsxDate:SetMonth("8")
oXlsxDate:SetDay("23")
oXlsxDate:SetHour("17")
oXlsxDate:SetMinute("55")
oXlsxDate:SetSeconds("43.123")
cValue := oXlsxDate:toPrinterFormat()
// data e hora completas na célula
lRet := oXlsx:SetDateTime(nRow, nCol, cValue) |
SetHyperlink()
Atribui um hiperlink interno ou externo (URL) a uma célula.
Sintaxe: FwPrinterXlsx():SetHyperlink(nRow, nCol, cValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
cValue | caractere | x | url ou hiperlink para o documento para atribuição |
SetBoolean()
Atribui um valor lógico a uma célula.
Sintaxe: FwPrinterXlsx():SetBoolean(nRow, nCol, lValue) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para atribuição do valor | ||
nCol | numérico | x | coluna da célula para atribuição do valor | ||
lValue | lógico | x | valor lógico para atribuição |
AddImageFromBuffer()
Adiciona uma imagem para a planilha a partir de uma string contendo os bytes da imagem (buffer).
O tamanho da imagem está limitado à 999.999 bytes
(aproximadamente 976Kb), caso a imagem ultrapasse este tamanho é necessário informar o endereço de diretório absoluto para a imagem com o método AddImageFromAbsolutePath
.
Apesar de receber a indicação de célula (linha e coluna) a renderização das imagens no arquivo gerado não será reduzida ao tamanho da célula. A imagem será exibida em seu tamanho original, podendo ser indicado os novos valores em pixels para a largura e altura com os parâmetros nWidthResize
e nHeightResize
.
Sintaxe: FwPrinterXlsx():AddImageFromBuffer(nRow, nCol, cImageId, cBuffer, nWidthResize, nHeightResize) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para início da exibição da imagem | ||
nCol | numérico | x | coluna da célula para início da exibição da imagem | ||
cImageId | caractere | x | id da imagem para referências futuras com o método UseImageFromBuffer | ||
cBuffer | caractere | x | string com o buffer da imagem | ||
nWidthResize | numérico | 0 | nova largura para a imagem | ||
nHeightResize | numérico | 0 | nova altura para a imagem |
Informações |
---|
Um ponto de atenção é a configuração do limite para o tamanho de strings no Appserver e no Smartclient, pois a leitura de arquivo de imagens pode facilmente exceder os limites configurados. |
Exemplo:
Bloco de código |
---|
cImgRel := 'logo'
nHndImagem:= fOpen(cImgDir, FO_READ)
nLenImagem := 0
nLenImagem := fSeek( nHndImagem, 0, FS_END)
fSeek( nHndImagem, 0, FS_SET)
fRead( nHndImagem, @cBuffer, nLenImagem)
lRet := oXlsx:AddImageFromBuffer(5, 8, cImgRel, cBuffer, 0, 0) |
UseImageFromBuffer()
Usa uma imagem já adicionada à planilha através do método AddImageFromBuffer
anteriormente no arquivo.
Sintaxe: FwPrinterXlsx():UseImageFromBuffer(nRow, nCol, cImageId, nWidthResize, nHeightResize) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para início da exibição da imagem | ||
nCol | numérico | x | coluna da célula para início da exibição da imagem | ||
cImageId | caractere | x | id da imagem adicionada por buffer anteriormente | ||
nWidthResize | numérico | 0 | nova largura para a imagem | ||
nHeightResize | numérico | 0 | nova altura para a imagem |
Exemplo:
Bloco de código |
---|
cImgId := 'id_de_imagem_adicionada_por_buffer'
lRet := oPrtXlsx:UseImageFromBuffer(20, 8, cImgId, 114, 33) |
AddImageFromAbsolutePath()
Adiciona uma imagem à planilha a partir de um endereço de diretório absoluto.
Este método tem seu resultado influenciado pelo local/endereço de geração do arquivo base .rel. Os comportamentos possíveis são:
- Quando o arquivo é gerado no servidor (
/spool/
,/system/
ou qualquer outro diretório norootpath
) o endereço absoluto da imagem precisa ser desde a unidade do disco local do servidor. Por exemplo, com o .rel no endereço/planilhas/arquivo.rel
a imagem precisa ser eme:\totvs\protheus\protheus_data\minhas_imagens\imagem_que_quero_usar.png
oul:/opt/totvs/protheus/protheus_data/minhas_imagens/imagem_que_quero_user.png.
- Quando o arquivo .rel é gerado local (endereço do cliente/terminal/smartclient) o endereço absoluto da imagem precisa ser a partir do disco local da máquina cliente. Por exemplo, com o .rel no endereço
c:\planilhas\minha_planilha.rel
a imagem precisa estar em um diretório acessível pela máquina cliente comoc:\temporários\imagens\imagem.png
.
Sintaxe: FwPrinterXlsx():AddImageFromAbsolutePath(nRow, nCol, cImgPath, nWidthResize, nHeightResize) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | linha da célula para início da exibição da imagem | ||
nCol | numérico | x | coluna da célula para início da exibição da imagem | ||
cImgPath | caractere | x | diretório absoluto da imagem | ||
nWidthResize | numérico | 0 | nova largura para a imagem | ||
nHeightResize | numérico | 0 | nova altura para a imagem |
Exemplo:
Bloco de código |
---|
// usando imagem no server no mesmo endereço do .rel
cRootPath := 'C:\Especif\Protheus12\sistemico\protheus_data_27'
cPath := "\spool\" // /spool/ para uma geração no server
cArquivo := cPath + "base_planilha.rel"
cImgDir := cRootPath + cPath + 'protheus_logo.png'
lRet := oXlsx:Activate(cArquivo)
lRet := oXlsx:AddImageFromAbsolutePath(10, 8, cImgDir, 200, 100)
// usando imagem no cliente/local no mesmo endereço do .rel
cPath := GetClientDir() // diretório do smartclient
cArquivo := cPath + "base_planilha.rel"
cImgDir := cPath + "protheus_logo.png"
lRet := oXlsx:Activate(cArquivo)
lRet := oXlsx:AddImageFromAbsolutePath(10, 8, cImgDir, 200, 100) |
ApplyAutoFilter()
Aplica um auto filtro no conjunto de células da matriz (de célula até célula).
Sintaxe: FwPrinterXlsx():ApplyAutoFilter(nRowFrom, nColFrom, nRowTo, nColTo) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRowFrom | numérico | x | linha da célula inicial (superior esquerda) | ||
nColFrom | numérico | x | coluna da célula inicial (superior esquerda) | ||
nRowTo | numérico | x | linha da célula final (inferior direita) | ||
nColTo | numérico | x | coluna da célula final (inferior direita) |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
// Aplica auto filtro no intervalo A1:C7
lRet := oXlsx:ApplyAutoFilter(1,1,7,3) |
SetVerticalBarCodeContent()
Adiciona um código de barras vertical.
Sintaxe: FwPrinterXlsx():SetVerticalBarCodeContent(nRow, nCol, cContent) → lRet
Parâmetros:
Nome | Tipo | Obrigatório | Default | Referência | Descrição |
nRow | numérico | x | posição de linha da célula para atribuição | ||
nCol | numérico | x | posição de coluna da célula para atribuição | ||
cContent | caractere | x | conteúdo para a montagem do código de barras |
Exemplo:
Bloco de código | ||
---|---|---|
| ||
nRow := 23
nCol := 13
cContent := "01005000000001001010111010001010111000111011101000101000111010111000101000111011100010101000111000101010111000111010"
lRet := oXlsx:SetVerticalBarCodeContent(nRow, nCol, cContent) // Comando 'Código de barra vertical' |
Outros códigos de barras
Os demais códigos de barras suportados são indicados a seguir. Estes são atribuições de conteúdos do tipo texto com fontes e valores específicos a cada um dos tipos.
Como a atribuição é do tipo texto, o controle da fonte fica sob responsabilidade do programa que está usando a FwPrinterXlsx
.
Code128
Possui as fontes Code128b e Code128c como opções para a impressão do código de barras.
Exemplo:
Bloco de código | ||
---|---|---|
| ||
// cFont := FwPrinterFont():getFromName('code128b')
cFont := FwPrinterFont():Code128b()
nSize := 50
lItalic := .F.
lBold := .F.
lUnderlined := .F.
// Fonte Code 128 (para código de barras)
lRet := oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined)
nRow := 2
nCol := 13
// Texto para o código de barras Code128
lRet := oPrtXlsx:SetText(nRow, nCol, "Ò,BX'hÓ") |
QrCode
Possui a fonte QrCode disponível para uso.
Exemplo:
Bloco de código | ||
---|---|---|
| ||
// cFont := FwPrinterFont():getFromName('qrcode')
cFont := FwPrinterFont():QrCode()
nSize := 50
lItalic := .F.
lBold := .F.
lUnderlined := .F.
// Fonte QRCode (para código de barras 2D)
lRet := oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined)
nRow := 6
nCol := 13
// Texto para o código de barras QRCode
lRet := oPrtXlsx:SetText(nRow, nCol, "QRCode gerado para o Excel") |
DataMatrix
Possui a fonte Datamatrix disponível para uso.
Exemplo:
Bloco de código | ||
---|---|---|
| ||
// cFont := FwPrinterFont():getFromName('datamatrix')
cFont := FwPrinterFont():DataMatrix()
nSize := 50
lItalic := .F.
lBold := .F.
lUnderlined := .F.
// Fonte DataMatrix (para código de barras 2D)
lRet := oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) |
SetTypeDisplayLineGrid
Informa o tipo de visualização de linhas do grid, esse método está disponível na lib 20231009
Exemplo:
Bloco de código | ||
---|---|---|
| ||
lRet := oPrtXlsx:SetTypeDisplayLineGrid( totvs.framework.xlsx.LinesGridDisplay():getHideAll() ) |
GetStatusPrinter
Retorna o status da printer sobre a geração do XLSX, esse método está disponível na lib 20231009. Esse status não deve ser utilizado para validar a geração bem sucedida do XLSX.
Exemplo:
Bloco de código | ||
---|---|---|
| ||
nStatus := oPrtXlsx:GetStatusPrinter() |
PDF417
Possui a fonte pdf417 disponível para uso.
Exemplo:
Bloco de código | ||
---|---|---|
| ||
// cFont := FwPrinterFont():getFromName('PDF417')
cFont := FwPrinterFont():PDF417()
nSize := 300
lItalic := .T.
lBold := .F.
lUnderlined := .F.
// Fonte PDF417 (para código de barras 2D)
lRet := oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) |
Exemplos
Uso simples
O exemplo a seguir mostra como gerar uma planilha simples.
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include 'protheus.ch'
function u_basicoxlsx()
local oPrtXlsx as object
local cFilename as character
// local oFileW as object
local lRet as logical
cFilename := '/system/'+cValToChar(ThreadId())+'_teste.rel'
ferase(cFilename)
// oFileW := FwFileWriter():New(cFilename)
oPrtXlsx := FwPrinterXlsx():New()
// lRet := oPrtXlsx:Activate(cFilename, oFileW)
lRet := oPrtXlsx:Activate(cFilename)
lRet := oPrtXlsx:AddSheet("1 - Plan")
lRet := oPrtXlsx:SetText(1, 1, "Valor na célula")
lRet := oPrtXlsx:toXlsx()
oPrtXlsx:DeActivate()
Return
|
Planilha com todos os recursos
O exemplo de planilha a seguir implementa todos os recursos disponíveis.
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#include "protheus.ch"
#include "fileio.ch"
static oCellHorAlign := FwXlsxCellAlignment():Horizontal()
static oCellVertAlign := FwXlsxCellAlignment():Vertical()
function u_fwprtxlsx()
classe()
alert('terminou')
return
static function classe()
// Antes de rodar este programa coloque uma imagem válida nos diretórios mencionados a seguir
// ou indique um caminho válido para uma imagem
local cRootPath := 'C:\Especif\Protheus12\sistemico\protheus_data_27'
local cPath := "\spool\" // /spool/ para uma geração no server
local cArquivo := cPath + "exemplo.rel"
local cImgRel := 'logo'
local cImgDir := cRootPath + cPath + 'protheus_logo.png'
local cBuffer:= ""
local lRet := .F.
local oFileW := FwFileWriter():New(cArquivo)
local oPrtXlsx := FwPrinterXlsx():New()
local nHndImagem := 0
local nLenImagem := 0
local jFontHeader
local jFontNum
local jFontText
local jBorderHeader
local jBorderLeft
local jBorderCenter
local jBorderRight
local jFormat
lRet := oPrtXlsx:Activate(cArquivo, oFileW)
lRet := oPrtXlsx:AddSheet("Minha Plan1")
// Atenção, antes de remover os comentários dos comandos a seguir
// confira o endereço para a imagem
// nHndImagem := fOpen(cImgDir, FO_READ)
// if nHndImagem < 0
// return MsgStop("Não foi possível abrir " + cImgDir)
// endif
// nLenImagem := fSeek( nHndImagem, 0, FS_END)
// fSeek( nHndImagem, 0, FS_SET)
// fRead( nHndImagem, @cBuffer, nLenImagem)
// lRet := oPrtXlsx:AddImageFromBuffer(5, 8, cImgRel, cBuffer, 0, 0)
// lRet := oPrtXlsx:AddImageFromAbsolutePath(10, 8, cImgDir, 200, 100)
// lRet := oPrtXlsx:UseImageFromBuffer(20, 8, cImgRel, 114, 33 | ||||||||||
Bloco de código | ||||||||||
| ||||||||||
#include 'protheus.ch' function u_basicoxlsx() local oXlsx as object local cFilename as character // local oFileW as object local lRet as logical cFilename := '/system/'+cValToChar(ThreadId())+'_teste_poc.rel' ferase(cFilename) // oFileWcFont := FwFileWriterFwPrinterFont():NewgetFromName(cFilename"Calibri") oXlsxcFont := FwPrinterXlsxFwPrinterFont():NewCalibri() //nSize lRet := oXlsx:Activate(cFilename, oFileW)14 lItalic := .T. lRetlBold := oXlsx:Activate(cFilename) .T. lRetlUnderlined := oXlsx:AddSheet("1 - Plan") lRet := oXlsx:SetText(1, 1, "Valor na célula") .T. // Comando 'Fonte' com Calibri 14, itálico, negrito e sublinhado lRet := oXlsxoPrtXlsx:toXlsx() oXlsx:DeActivate() Return |
Planilha com todos os recursos
O exemplo de planilha a seguir implementa todos os recursos disponíveis.
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#include "protheus.ch" #include "fileio.ch" function u_fwprtxlsx() classeSetFont(cFont, nSize, lItalic, lBold, lUnderlined) cHorAlignment := oCellHorAlign:Default() alert('terminou') return static function classe() cVertAlignment := oCellVertAlign:Default() lWrapText := .F. local cRootPathnRotation := 0 // 'C:\Especif\Protheus12\sistemico\protheus_data_27' local cPath := "\spool\" // /spool/ para uma geração no server local cArquivo := cPath + "xls_class_rel.rel" local cImgRel := 'logo' local cImgDir := cRootPath + cPath + 'protheus_logo.png'Comando 'Formato de Célula' com cor de texto e fundo personalizadas lRet := oPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "FF0000", "C0C0C0", "" ) nColFrom := 1 nColTo := 5 nWidth := 24 lRet := oPrtXlsx:SetColumnsWidth(nColFrom, nColTo, nWidth) localnRow cBuffer:= ""1 local lRetnCol := .F.1 local oFileW := FwFileWriter():New(cArquivo)// Texto em A1 local oXlsxlRet := FwPrinterXlsx()oPrtXlsx:New()SetText(nRow, nCol, "Texto na célula") local// oCellHorAligncFont := FwXlsxCellAlignmentFwPrinterFont():HorizontalgetFromName("Calibri") local oCellVertAligncFont := FwXlsxCellAlignmentFwPrinterFont():VerticalCalibri() localnSize nHndImagem:= fOpen(cImgDir, FO_READ)11 locallItalic nLenImagem := 0 if nHndImagem < 0 return MsgStop("Não foi possível abrir " + cImgDir) endIf .F. lBold := .F. nLenImagemlUnderlined := fSeek( nHndImagem, 0, FS_END) fSeek( nHndImagem, 0, FS_SET) fRead( nHndImagem, @cBuffer, nLenImagem.F. // Calibri 11 lRet := oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) lRet := oXlsxoPrtXlsx:ActivateResetCellsFormat(cArquivo, oFileW) lRetnRow := oXlsx:AddSheet("Minha Plan1") 2 nCol := 1 lRet := oXlsxoPrtXlsx:AddImageFromBufferSetText(5nRow, 8nCol, cImgRel, cBuffer, 0, 0"00123") lRetnRow := oXlsx:AddImageFromAbsolutePath(10, 8, cImgDir, 200, 100) 3 nCol := 1 // Número 008 lRet := oXlsxoPrtXlsx:UseImageFromBufferSetNumber(20nRow, 8nCol, cImgRel, 114, 338) //nRow cFont := FwPrinterFont():getFromName("Calibri")4 cFontnCol := FwPrinterFont():Calibri()1 nSize// :=Número 1404 lItaliclRet := .T. oPrtXlsx:SetNumber(nRow, nCol, 4) lBoldnRow := .T.5 lUnderlinednCol := .T.1 // ComandoFórmula 'Fonte'que comsoma Calibrios 14,dois itálico, negrito e sublinhadonúmeros anteriores lRet := oXlsxoPrtXlsx:SetFontSetFormula(cFontnRow, nSize, lItalic, lBold, lUnderlinednCol, "=SUM(A3:A4)") cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default() lWrapText := .F. nRotation := 0 cCustomFormat := "#,##0" // Comando 'Formato de Célula' com cor de texto e fundo personalizadas lRet := oXlsxoPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "FF0000000000", "C0C0C0FFFFFF", "" cCustomFormat) nColFromnRow := 14 nColTonCol := 52 nWidth := 24// Número com formato customizado (123.123.123) lRet := oXlsxoPrtXlsx:SetColumnsWidthSetNumber(nColFromnRow, nColTonCol, nWidth123123123) nRowcHorAlignment := 1oCellHorAlign:Default() nColcVertAlignment := 1oCellVertAlign:Default() //lWrapText Texto em A1:= .F. lRetnRotation := oXlsx:SetText(nRow, nCol, "Texto na célula") 0 cCustomFormat := "0.00%" // cFont := FwPrinterFont():getFromName("Calibri") cFont := FwPrinterFont():Calibri()Comando 'Formato de Célula' com cor de texto e fundo personalizadas nSizelRet := 11 lItalic := .F.oPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) lBoldnRow := .F.4 lUnderlinednCol := .F.3 // Calibri 11 Número com formato customizado (4,27%) lRet := oXlsxoPrtXlsx:SetFontSetNumber(cFontnRow, nSizenCol, lItalic, lBold, lUnderlined0.0427) lRetcHorAlignment := oXlsxoCellHorAlign:ResetCellsFormatDefault() nRowcVertAlignment := 2 nCol := 1oCellVertAlign:Default() lRetlWrapText := oXlsx:SetText(nRow, nCol, "00123") .F. nRownRotation := 30 nColcCustomFormat := 1 "R$ #,##0.00;[Red]-R$ #,##0.00" // Número 008 Seta formato numérico R$ #,##0.00;[Red]-R$ #,##0.00 lRet := oXlsxoPrtXlsx:SetNumber(nRow, nCol, 8SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) nRow := 4 nCol := 14 // Número 04 com formato customizado (R$ 1234,56) lRet := oXlsxoPrtXlsx:SetNumber(nRow, nCol, 41234.56) nRow := 54 nCol := 15 // FórmulaNúmero quecom somaformato os dois números anteriorescustomizado (R$ 1234,56) lRet := oXlsxoPrtXlsx:SetFormulaSetNumber(nRow, nCol, "=SUM(A3:A4)"-1234.56) cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default() lWrapText := .F. nRotation := 0 cCustomFormat := "#,##0dd/mm/yyyy" // ComandoSeta 'Formatoformato de Célula' com cor de texto e fundo personalizadasdata dd/mm/yyyy lRet := oXlsxoPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) nRow := 46 nCol := 1 dValue := 2STOD("20190823") // Número com formato customizado (123.123.123)Data "ano, mês, dia, hora, minuto, segundo" no padrão: yyyy,mm,dd,hh,mm,ss.sss lRet := oXlsxoPrtXlsx:SetNumberSetDate(nRow, nCol, 123123123dValue) cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default() lWrapText := .F. nRotation := 0 cCustomFormat := "0.00%hh:mm" // ComandoSeta 'Formatoformato de Célula' com cor de texto e fundo personalizadashora hh:mm lRet := oXlsxoPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) "FFFFFF", cCustomFormat) nRow := 6 nCol := 2 oPrtXlsxDate := FwXlsxDateFormat():New() oPrtXlsxDate:SetHour("17") nRow := 4oPrtXlsxDate:SetMinute("55") nColcValue := 3oPrtXlsxDate:toPrinterFormat() // Número com formato customizado (4,27%)17:55 lRet := oXlsxoPrtXlsx:SetNumberSetDateTime(nRow, nCol, 0.0427cValue) cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default() lWrapText := .F. nRotation := 0 cCustomFormat := "R$ #,##0.00;[Red]-R$ #,##0.00dd/mm/yy hh:mm:ss.000" // Seta formato numérico R$ #,##0.00;[Red]-R$ #,##0.00de data e hora dd/mm/yy hh:mm:ss.000 lRet := oXlsxoPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) cCustomFormat) nRow := 6 nCol := 3 oPrtXlsxDate := FwXlsxDateFormat():New() oPrtXlsxDate:SetYear("2019") oPrtXlsxDate:SetMonth("8") oPrtXlsxDate:SetDay("23") oPrtXlsxDate:SetHour("17") oPrtXlsxDate:SetMinute("55") nRow := 4oPrtXlsxDate:SetSeconds("43.123") nColcValue := 4oPrtXlsxDate:toPrinterFormat() // Númerodata come formato customizado (R$ 1234,56)hora completas lRet := oXlsxoPrtXlsx:SetNumberSetDateTime(nRow, nCol, 1234.56cValue) nRow := 46 nCol := 54 // Número com formato customizado (R$ 1234,56oPrtXlsxDate := FwXlsxDateFormat():New() oPrtXlsxDate:SetYear("2019") lRet := oXlsx:SetNumber(nRow, nCol, -1234.56) oPrtXlsxDate:SetMonth("8") oPrtXlsxDate:SetDay("23") cHorAlignment := oCellHorAlign:Default(oPrtXlsxDate:SetHour("17") cVertAlignment := oCellVertAlign:Default(oPrtXlsxDate:SetMinute("55") lWrapText := .F.oPrtXlsxDate:SetSeconds("43.123") nRotationcValue := 0 cCustomFormat := "dd/mm/yyyy"oPrtXlsxDate:toPrinterFormat() // Setadata formatoe de data dd/mm/yyyyhora completas lRet := oXlsxoPrtXlsx:SetCellsFormatSetDateTime(cHorAlignmentnRow, cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) nCol, cValue) cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default() nRowlWrapText := 6.F. nColnRotation := 10 dValuecCustomFormat := STOD("20190823mmm-yyyy") // DataSeta "ano, mês, dia, hora, minuto, segundo" no padrão: yyyy,mm,dd,hh,mm,ss.sssformato de data mmm-yyyy lRet := oXlsxoPrtXlsx:SetDateSetCellsFormat(nRowcHorAlignment, nColcVertAlignment, dValue) cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default()lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) lWrapTextnRow := .F.6 nRotationnCol := 05 cCustomFormatdValue := STOD("hh:mm20190823") // Data Seta formato de hora hh:mm"ano, mês, dia, hora, minuto, segundo" no padrão: yyyy,mm,dd,hh,mm,ss.sss lRet := oXlsxoPrtXlsx:SetCellsFormatSetDate(cHorAlignmentnRow, cVertAlignmentnCol, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormatdValue) nRow// cFont := 6FwPrinterFont():getFromName("Calibri") nColcFont := 2FwPrinterFont():Calibri() oXlsxDatenSize := FwXlsxDateFormat():New() 11 lItalic oXlsxDate:SetHour("17") := .F. lBold oXlsxDate:SetMinute("55"):= .F. cValuelUnderlined := oXlsxDate:toPrinterFormat().T. // 17:55 Calibri sublinhada para url lRet := oXlsxoPrtXlsx:SetDateTime(nRowSetFont(cFont, nSize, lItalic, nCollBold, cValuelUnderlined) cHorAlignment := oCellHorAlign:Default() cVertAlignment := oCellVertAlign:Default() lWrapText := .F. nRotation := 0 cCustomFormat := "dd/mm/yy hh:mm:ss.000" // Seta formato de data e hora dd/mm/yy hh:mm:ss.000com texto azul lRet := oXlsxoPrtXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "0000000000FF", "FFFFFF", cCustomFormat) nRow := 67 nCol := 31 oXlsxDate := FwXlsxDateFormat():New() // url lRet oXlsxDate:SetYear("2019") oXlsxDate:SetMonth("8") oXlsxDate:SetDay("23") oXlsxDate:SetHour("17") oXlsxDate:SetMinute("55") oXlsxDate:SetSeconds("43.123"):= oPrtXlsx:SetHyperlink(nRow, nCol, "http://www.totvs.com.br") nRow := 8 cValuenCol := oXlsxDate:toPrinterFormat()1 // data e hora completasurl lRet := oXlsxoPrtXlsx:SetDateTimeSetHyperlink(nRow, nCol, cValue"http://www.google.com") // nRowTexto :=de 6 exibição da url inserida nColno :=comando 4anterior oXlsxDatelRet := FwXlsxDateFormat()oPrtXlsx:New()SetText(nRow, nCol, "Google") oXlsxDate:SetYear("2019") nRow := 9 nCol oXlsxDate:SetMonth("8"):= 1 oXlsxDate:SetDay("23") oXlsxDate:SetHour("17") oXlsxDate:SetMinute("55") oXlsxDate:SetSeconds("43.123")// URIs locais são suportadas para referências lRet := oPrtXlsx:SetHyperlink(nRow, nCol, "internal:'Minha Plan1'!A2") nRow := 10 cValuenCol := oXlsxDate:toPrinterFormat()1 // URIs locais datasão esuportadas horapara completasreferências lRet := oXlsxoPrtXlsx:SetDateTimeSetHyperlink(nRow, nCol, cValue) "internal:'Minha Plan2'!B2") // cFont := FwPrinterFont():getFromName("Calibri") cHorAlignmentcFont := oCellHorAlignFwPrinterFont():DefaultCalibri() cVertAlignmentnSize := oCellVertAlign:Default()11 lWrapTextlItalic := .F. nRotationlBold := 0.F. cCustomFormatlUnderlined := "mmm-yyyy".F. // Seta formato de data mmm-yyyyCalibri 11 lRet := oXlsxoPrtXlsx:SetCellsFormatSetFont(cHorAlignmentcFont, cVertAlignmentnSize, lWrapTextlItalic, nRotation, "000000", "FFFFFF", cCustomFormatlBold, lUnderlined) nRow := 11 nCol := 1 // lógico lRet := oPrtXlsx:SetBoolean(nRow, nCol, .T.) nRow := 611 nCol := 5 dValue := STOD("20190823")2 // Data "ano, mês, dia, hora, minuto, segundo" no padrão: yyyy,mm,dd,hh,mm,ss.ssslógico lRet := oXlsxoPrtXlsx:SetDateSetBoolean(nRow, nCol, dValue.F.) //cHorAlignment cFont := FwPrinterFont()oCellHorAlign:getFromNameFill("Calibri") cFont := FwPrinterFont():Calibri() nSizecVertAlignment := 11oCellVertAlign:Justify() lItaliclWrapText := .FT. lBoldnRotation := .F.0 lUnderlinedcCustomFormat := .T."" // Calibri sublinhada para urlFormato lRet := oXlsxoPrtXlsx:SetFont(cFontSetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nSizenRotation, lItalic"FF00FF", lBold"808080", lUnderlinedcCustomFormat) cHorAlignmentlTop := oCellHorAlign:Default().T. cVertAlignmentlBottom := oCellVertAlign:Default() .T. lLeft:= .T. lWrapTextlRight := .FT. nRotationcStyle := 0FwXlsxBorderStyle():DashDot() cCustomFormatcColor := "008000" // Seta formato com texto azulBorda lRet := oXlsxoPrtXlsx:SetCellsFormatSetBorder(cHorAlignmentlLeft, cVertAlignmentlTop, lWrapTextlRight, nRotationlBottom, "0000FF"cStyle, "FFFFFF", cCustomFormatcColor) nRow := 712 nCol := 1 // url blank - Usado somente para aplicar a formatação lRet := oXlsxoPrtXlsx:SetHyperlinkApplyFormat(nRow, nCol, "http://www.totvs.com.br") nRow := 812 nCol := 12 // url blank - Usado somente para aplicar a formatação lRet := oXlsxoPrtXlsx:SetHyperlinkApplyFormat(nRow, nCol, "http://www.google.com") // cFont := FwPrinterFont():getFromName('code128b') //cFont Texto de exibição da url inserida no comando anterior:= FwPrinterFont():Code128b() nSize := 50 lRetlItalic := oXlsx:SetText(nRow, nCol, "Google") .F. nRowlBold := 9.F. nCollUnderlined := 1.F. // Fonte URIsCode locais128 são(para suportadascódigo parade referênciasbarras) lRet := oXlsxoPrtXlsx:SetHyperlink(nRowSetFont(cFont, nSize, nCollItalic, "internal:'Minha Plan1'!A2"lBold, lUnderlined) nRow := 102 nCol := 113 // Texto URIspara locaiso sãocódigo suportadasde parabarras referênciasCode128 lRet := oXlsxoPrtXlsx:SetHyperlinkSetText(nRow, nCol, "internal:'Minha Plan2'!B2Ò,BX'hÓ") // cFont := FwPrinterFont():getFromName("Calibri"'qrcode') cFont := FwPrinterFont():CalibriQrCode() nSize := 1150 lItalic := .F. lBold := .F. lUnderlined := .F. // Calibri 11 Fonte QRCode (para código de barras 2D) lRet := oXlsxoPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) nRow := 11 nCol := 1 // lógico lRet := oXlsx:SetBoolean(nRow, nCol, .T.lUnderlined) nRow := 116 nCol := 213 // lógico Texto para o código de barras QRCode lRet := oXlsxoPrtXlsx:SetBooleanSetText(nRow, nCol, .F. "QRCode gerado para o Excel") cHorAlignment// cFont := oCellHorAlignFwPrinterFont():FillgetFromName('datamatrix') cVertAlignmentcFont := oCellVertAlignFwPrinterFont():JustifyDataMatrix() nSize := 50 lWrapTextlItalic := .TF. nRotationlBold := 0.F. cCustomFormatlUnderlined := "".F. // Formato Fonte DataMatrix (para código de barras 2D) lRet := oXlsx:SetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nRotation, "FF00FF", "808080", cCustomFormat oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) lTopnRow := .T.11 lBottomnCol := .T. lLeft:= .T.13 // Texto para o código de barras Datamatrix lRightlRet := .T.oPrtXlsx:SetText(nRow, nCol, "Datamatrix gerado para o Excel") cStyle// cFont := FwXlsxBorderStyleFwPrinterFont():DashDotgetFromName('PDF417') cColorcFont := "008000" // BordaFwPrinterFont():PDF417() lRetnSize := oXlsx:SetBorder(lLeft, lTop, lRight, lBottom, cStyle, cColor) 300 lItalic := .T. nRowlBold := 12.F. nCollUnderlined := 1.F. // blankFonte -PDF417 Usado(para somentecódigo parade aplicar a formataçãobarras 2D) lRet := oXlsxoPrtXlsx:ApplyFormat(nRowSetFont(cFont, nSize, lItalic, nCollBold, ""lUnderlined) nRow := 1216 nCol := 213 // blank - Usado somenteTexto para aplicar a formatação ??? o quecódigo acontece quando tem valor ???de barras PDF417 lRet := oXlsxoPrtXlsx:ApplyFormatSetText(nRow, nCol, "1PDF417 gerado para o Excel") // cFont := FwPrinterFont():getFromName('code128bcalibri') cFont := FwPrinterFont():Calibri():Code128b() nSize := 11 lItalic := .F. lBold := .F. lUnderlined := .F. // Calibri 11 lRet := oPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) nSizenRow := 5023 lItalicnCol := .F.13 lBoldcContent := .F."01005000000001001010111010001010111000111011101000101000111010111000101000111011100010101000111000101010111000111010" lUnderlinedlRet := .F. oPrtXlsx:SetVerticalBarCodeContent(nRow, nCol, cContent) // Comando 'Código de barra vertical' // Fonte Code 128 (para código de barrasNova página lRet := oPrtXlsx:AddSheet("Minha Plan2") cHorAlignment := oCellHorAlign:Center() lRetcVertAlignment := oXlsxoCellVertAlign:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) Center() lWrapText := .F. nRownRotation := 2270 nColcCustomFormat := 13"" // Seta texto Textovermelho paracom oalinhamento códigohorizontal dee barrasvertical Code128centralizado (oe textocom érotação codificadode pelatexto FWMSPrinter)vertical lRet := oXlsxoPrtXlsx:SetTextSetCellsFormat(nRowcHorAlignment, nColcVertAlignment, "Ò,BX'hÓ") // cFont := FwPrinterFont():getFromName('qrcode') cFont := FwPrinterFont():QrCode()lWrapText, nRotation, "FF0000", "FFFFFF", cCustomFormat) nSizenRowFrom := 502 lItalicnColFrom := .F.2 lBoldnRowTo := .F.21 lUnderlinednColTo := .F.3 // FonteMescla QRCode (para código de barras 2D)intervalo B2:C21 lRet := oXlsxoPrtXlsx:SetFontMergeCells(cFontnRowFrom, nSizenColFrom, lItalicnRowTo, lBold, lUnderlinednColTo) nRow := 62 nCol := 13 // Texto para o código de barras QRCode lRet := oXlsx:SetText(nRow, nCol, "QRCode gerado para o Excel") := 2 // Texto cFont := FwPrinterFont():getFromName('datamatrix') cFont := FwPrinterFont():DataMatrix(das células mescladas (apontando sempre para a primeira célula do intervalo) nSizelRet := 50 oPrtXlsx:SetText(nRow, nCol, "Células Mescladas") lItaliclTop := .FT. lBoldlBottom := .FT. lUnderlined lLeft:= .F. // Fonte DataMatrix (para código de barras 2D) lRet := oXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlined) lRight := .F. nRowcStyle := 11FwXlsxBorderStyle():Medium() nColcColor := 13"0000FF" // TextoBorda paraazul, osuperior código de barras Datamatrixe inferior lRet := oXlsxoPrtXlsx:SetTextSetBorder(nRowlLeft, nCollTop, "Datamatrix gerado para o Excel"lRight, lBottom, cStyle, cColor) //cHorAlignment cFont := FwPrinterFont()oCellHorAlign:getFromNameDefault('PDF417') cFontcVertAlignment := FwPrinterFont()oCellVertAlign:PDF417Default() nSizelWrapText := 300 lItalic := .T. lBoldnRotation := .F.0 lUnderlinedcCustomFormat := .F."" // Seta Fontetexto PDF417texto (paracom códigoquebra de barras 2D)linha lRet := oXlsxoPrtXlsx:SetFont(cFontSetCellsFormat(cHorAlignment, cVertAlignment, lWrapText, nSizenRotation, lItalic"000000", lBold"FFFFFF", lUnderlinedcCustomFormat) nRow := 1624 nCol := 132 // Texto parada océlula código de barras PDF417com borda lRet := oXlsxoPrtXlsx:SetText(nRow, nCol, "PDF417Texto geradocom paraquebra ode Excel") linha") nRowFrom := 26 nRowTo := 30 nHeight := 18.75 // cFont := FwPrinterFont():getFromName('calibri') Altura 18,75 nas linhas 26 a 30 cFontlRet := FwPrinterFont()oPrtXlsx:Calibri(SetRowsHeight(nRowFrom, nRowTo, nHeight) nSize// := 11Largura 23,71 lItaliclRet := .F. lBold := .F.oPrtXlsx:SetColumnsWidth(5, 10, 23.71) lUnderlinedlRet := .F.oPrtXlsx:ResetBorder() // Limpa Calibrio 11formato lRet := oXlsxoPrtXlsx:SetFont(cFont, nSize, lItalic, lBold, lUnderlinedResetCellsFormat() // Nova página planilha // Pequena planilha para testar o AutoFiltro lRet := oXlsxoPrtXlsx:AddSheet("Minha Plan2AutoFiltro") cHorAlignmentjFontHeader := oCellHorAlignFwXlsxPrinterConfig():CenterMakeFont() cVertAlignmentjFontHeader['font'] := oCellVertAlignFwPrinterFont():CenterTimesNewRoman() lWrapTextjFontHeader['size'] := .F.15 nRotationjFontHeader['bold'] := 270 cCustomFormat := "" // Seta texto vermelho com alinhamento horizontal e vertical centralizado e com rotação de texto vertical.T. jFontHeader['underline'] := .T. lRetjFontNum := oXlsxFwXlsxPrinterConfig():SetCellsFormatMakeFont(cHorAlignment,) cVertAlignment, lWrapText, nRotation, "FF0000", "FFFFFF", cCustomFormat) jFontNum['font'] := FwPrinterFont():CourierNew() nRowFromjFontNum['size'] := 212 nColFromjFontText := 2FwXlsxPrinterConfig():MakeFont() nRowTojFontText['font'] := 21FwPrinterFont():ArialBlack() nColTojFontText['size'] := 312 // Mescla intervalo B2:C21jFontText['italic'] := .T. lRetjFormat := oXlsxFwXlsxPrinterConfig():MergeCells(nRowFrom, nColFrom, nRowTo, nColTo) MakeFormat() nRowjFormat['hor_align'] := 2oCellHorAlign:Center() nColjFormat['vert_align'] := 2oCellVertAlign:Center() // Texto das células mescladas (apontando sempreBordas para a primeira célula do intervalo)o header lRetjBorderHeader := oXlsx:SetText(nRow, nCol, "Células Mescladas") lTop := .T.FwXlsxPrinterConfig():MakeBorder() lBottomjBorderHeader['top'] := .T. jBorderHeader['bottom'] lLeft:= .FT. lRightjBorderHeader['border_color'] := .F."B1B1B1" cStylejBorderHeader['style'] := FwXlsxBorderStyle():MediumDouble() cColorjBorderLeft := "0000FF"FwXlsxPrinterConfig():MakeBorder() // Borda azul, superior e inferiorjBorderLeft['left'] := .T. lRet := oXlsx:SetBorder(lLeft, lTop, lRight, lBottom, cStyle, cColor) jBorderLeft['border_color'] := "FF0000" cHorAlignmentjBorderLeft['style'] := oCellHorAlignFwXlsxBorderStyle():DefaultDashed() cVertAlignmentjBorderCenter := oCellVertAlignFwXlsxPrinterConfig():DefaultMakeBorder() lWrapTextjBorderCenter['left'] := .T. nRotationjBorderCenter['right'] := 0.T. cCustomFormatjBorderCenter['border_color'] := "00FF00" // Seta texto texto com quebra de linhajBorderCenter['style'] := FwXlsxBorderStyle():Dashed() lRetjBorderRight := oXlsxFwXlsxPrinterConfig():SetCellsFormatMakeBorder(cHorAlignment,) cVertAlignment, lWrapText, nRotation, "000000", "FFFFFF", cCustomFormat) jBorderRight['right'] := .T. nRowjBorderRight['border_color'] := 24"0000FF" nColjBorderRight['style'] := 2FwXlsxBorderStyle():Dashed() // formatação para Textotodas daas célulacélulas coma bordaseguir lRet := oXlsxoPrtXlsx:SetText(nRow, nCol, "Texto com quebra de linha") SetCellsFormatConfig(jFormat) // fonte e borda para o cabeçalho nRowFromlRet := 26oPrtXlsx:SetFontConfig(jFontHeader) nRowTolRet := 30 oPrtXlsx:SetBorderConfig(jBorderHeader) nHeightlRet := 18.75 oPrtXlsx:SetValue(1, 2, "Produto") // Altura 18,75 nas linhas 26 a 30A1 lRet := oPrtXlsx:SetValue(1, 3, "Mês") lRet := oXlsxoPrtXlsx:SetRowsHeightSetValue(nRowFrom1, nRowTo4, nHeight"Total") // Largura 23,71 fonte e borda para coluna esquerda lRet := oXlsxoPrtXlsx:SetColumnsWidth(5, 10, 23.71) SetFontConfig(jFontNum) lRet := oXlsxoPrtXlsx:ResetBorderSetBorderConfig() // Limpa o formatojBorderLeft) lRet := oXlsxoPrtXlsx:ResetCellsFormatSetValue() 2, // Nova planilha2, 1) lRet := oXlsxoPrtXlsx:AddSheet("AutoFiltro") SetValue(3, 2, 1) //lRet Pequena planilha para testar o AutoFiltro:= oPrtXlsx:SetValue(4, 2, 2) lRet := oXlsxoPrtXlsx:SetValue(15, 12, "Produto") // A12) lRet := oXlsxoPrtXlsx:SetValue(16, 2, "Mês"3) lRet := oXlsxoPrtXlsx:SetValue(17, 2, 3, "Total")) // fonte e borda para coluna central lRet := oXlsxoPrtXlsx:SetValue(2, 1, 1SetFontConfig(jFontText) lRet := oXlsxoPrtXlsx:SetValue(3, 1, 1SetBorderConfig(jBorderCenter) lRet := oXlsxoPrtXlsx:SetValue(42, 13, 2"Janeiro") lRet := oXlsxoPrtXlsx:SetValue(53, 13, 2"Março") lRet := oXlsxoPrtXlsx:SetValue(64, 13, 3"Janeiro") lRet := oXlsxoPrtXlsx:SetValue(75, 13, 3"Março") lRet := oXlsxoPrtXlsx:SetValue(26, 23, "JaneiroFevereiro") lRet := oXlsxoPrtXlsx:SetValue(37, 23, "Março") // fonte e borda para coluna lRet := oXlsx:SetValue(4, 2, "Janeiro")central jFormat['custom_format'] := "#,##0.00" lRet := oXlsxoPrtXlsx:SetValue(5, 2, "Março"SetCellsFormatConfig(jFormat) lRet := oXlsxoPrtXlsx:SetValue(6, 2, "Fevereiro"SetFontConfig(jFontNum) lRet := oXlsxoPrtXlsx:SetValue(7, 2, "Março"SetBorderConfig(jBorderRight) lRet := oXlsxoPrtXlsx:SetValue(2, 34, 1001100.10) lRet := oXlsxoPrtXlsx:SetValue(3, 34, 1501150) lRet := oXlsxoPrtXlsx:SetValue(4, 34, 2001200.22) lRet := oXlsxoPrtXlsx:SetValue(5, 34, 1501150) lRet := oXlsxoPrtXlsx:SetValue(6, 34, 1001100.14) lRet := oXlsxoPrtXlsx:SetValue(7, 34, 1001100) // C7 // Aplica auto filtro no intervalo A1:C7 lRet := oXlsxoPrtXlsx:ApplyAutoFilter(1,1,7,3) lRet := oXlsxoPrtXlsx:toXlsx() return |
Templatedocumentos |
---|
HTML |
---|
<style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } .aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { background: #FF9900; !important } .menu-item.active-tab { border-bottom: none !important; } </style> |
Assuntos relacionados
- PrinterVersion
- FWFileWriter
- FwPrinterFont
- FwXlsxPrinterConfig
- FwXlsxCellAlignment | FwXlsxHorizontalAlignment | FwXlsxVerticalAlignment
- totvs.framework.xlsx.LinesGridDisplay
Índice
Índice | ||||
---|---|---|---|---|
|