StreamWriter
definió el tipo de escritor de flujo.
type StreamWriter struct {
File *File
Sheet string
SheetID int
// contiene campos filtrados o no exportados
}
Cell
se puede utilizar directamente en StreamWriter.SetRow
para especificar un estilo y un valor.
type Cell struct {
StyleID int
Formula string
Value interface{}
}
RowOpts
define las opciones para la fila establecida, se puede usar directamente en StreamWriter.SetRow
para especificar el estilo y las propiedades de la fila.
type RowOpts struct {
Height float64
Hidden bool
StyleID int
OutlineLevel int
}
func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error)
NewStreamWriter devuelve la estructura del escritor de secuencias por el nombre de la hoja de trabajo dado que se usa para escribir datos en una nueva hoja de trabajo vacía existente con grandes cantidades de datos. Tenga en cuenta que después de escribir datos con el escritor de flujo para la hoja de trabajo, debe llamar al método Flush
para finalizar el proceso de escritura de flujo, asegurarse de que el orden de los números de fila sea ascendente cuando se configuran las filas, y las funciones de modo normal y modo de flujo no puede ser un trabajo mixto para escribir datos en las hojas de trabajo. El escritor de flujo intentará usar archivos temporales en el disco para reducir el uso de la memoria cuando los datos en fragmentos en la memoria superen los 16 MB y no pueda obtener el valor de la celda en este momento. Por ejemplo, establezca datos para una hoja de trabajo de tamaño 102400
filas x 50
columnas con números y estilo:
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
sw, err := f.NewStreamWriter("Sheet1")
if err != nil {
fmt.Println(err)
return
}
styleID, err := f.NewStyle(&excelize.Style{Font: &excelize.Font{Color: "777777"}})
if err != nil {
fmt.Println(err)
return
}
if err := sw.SetRow("A1",
[]interface{}{
excelize.Cell{StyleID: styleID, Value: "Data"},
[]excelize.RichTextRun{
{Text: "Rich ", Font: &excelize.Font{Color: "2354e8"}},
{Text: "Text", Font: &excelize.Font{Color: "e83723"}},
},
},
excelize.RowOpts{Height: 45, Hidden: false}); err != nil {
fmt.Println(err)
return
}
for rowID := 2; rowID <= 102400; rowID++ {
row := make([]interface{}, 50)
for colID := 0; colID < 50; colID++ {
row[colID] = rand.Intn(640000)
}
cell, err := excelize.CoordinatesToCellName(1, rowID)
if err != nil {
fmt.Println(err)
break
}
if err := sw.SetRow(cell, row); err != nil {
fmt.Println(err)
break
}
}
if err := sw.Flush(); err != nil {
fmt.Println(err)
return
}
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
Establezca el valor de celda y la fórmula de celda para una hoja de trabajo con el escritor de flujo:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1},
excelize.Cell{Value: 2},
excelize.Cell{Formula: "SUM(A1,B1)"}})
Establezca el valor de celda y el estilo de las filas para una hoja de trabajo con el escritor de flujo:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1}},
excelize.RowOpts{StyleID: styleID, Height: 20, Hidden: false})
Establezca el valor de celda y el nivel de esquema de fila para una hoja de trabajo con escritor de flujo:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1}}, excelize.RowOpts{OutlineLevel: 1})
func (sw *StreamWriter) SetRow(cell string, values []interface{}, opts ...RowOpts) error
SetRow escribe una matriz en la fila de flujo mediante una coordenada inicial dada y un puntero al tipo de matriz slice
. Tenga en cuenta que debe llamar al método Flush
para finalizar el proceso de escritura de transmisión.
func (sw *StreamWriter) AddTable(table *Table) error
AddTable crea una tabla de Excel para StreamWriter utilizando el área de coordenadas y el formato establecidos.
Ejemplo 1, cree una tabla de A1:D5
:
err := sw.AddTable(&excelize.Table{Range: "A1:D5"})
Ejemplo 2, cree una tabla de F2:H6
con el formato establecido:
disable := false
err := sw.AddTable(&excelize.Table{
Range: "F2:H6",
Name: "table",
StyleName: "TableStyleMedium2",
ShowFirstColumn: true,
ShowLastColumn: true,
ShowRowStripes: &disable,
ShowColumnStripes: true,
})
Tenga en cuenta que la tabla debe tener al menos dos líneas, incluido el encabezado. Las celdas del encabezado deben contener cadenas y deben ser únicas. Actualmente, solo se permite una tabla para StreamWriter. AddTable
se debe llamar después de que se escriban las filas pero antes de Flush
. Consulte AddTable
para obtener detalles sobre el formato de la tabla.
func (sw *StreamWriter) InsertPageBreak(cell string) error
InsertPageBreak crea un salto de página para determinar dónde termina la página impresa y dónde comienza la siguiente según una referencia de celda dada, el contenido antes del salto de página se imprimirá en una página y después del salto de página en otra.
func (sw *StreamWriter) SetPanes(panes *Panes) error
SetPanes proporciona una función para crear y eliminar paneles congelados y paneles divididos al brindar opciones de paneles para StreamWriter
. Tenga en cuenta que debe llamar a la función SetPanes
antes de la función SetRow
.
func (sw *StreamWriter) MergeCell(topLeftCell, bottomRightCell string) error
MergeCell proporciona una función para fusionar celdas por un área de coordenadas determinada para StreamWriter. No cree una celda combinada que se superponga con otra celda combinada existente.
func (sw *StreamWriter) SetColWidth(min, max int, width float64) error
SetColWidth proporciona una función para establecer el ancho de una sola columna o varias columnas para el StreamWriter
. Tenga en cuenta que debe llamar a la función SetColWidth
antes de la función SetRow
. Por ejemplo, establezca la columna de ancho B:C
como 20
:
err := sw.SetColWidth(2, 3, 20)
func (sw *StreamWriter) Flush() error
Flush finalizando el proceso de escritura en streaming.