Écriture en flux
StreamWriter
a défini le type d'écrivain de flux.
type StreamWriter struct {
File *File
Sheet string
SheetID int
// contient des champs filtrés ou non exportés
}
Cell
peut être utilisée directement dans StreamWriter.SetRow
pour spécifier un style et une valeur.
type Cell struct {
StyleID int
Formula string
Value interface{}
}
RowOpts
définit les options de la ligne définie, il peut être utilisé directement dans StreamWriter.SetRow
pour spécifier le style et les propriétés de la ligne.
type RowOpts struct {
Height float64
Hidden bool
StyleID int
OutlineLevel int
}
Obtenez le flux écrivain
func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error)
NewStreamWriter renvoie la structure d'écriture de flux par le nom de feuille de calcul donné utilisé pour écrire des données sur une nouvelle feuille de calcul vide existante avec de grandes quantités de données. Notez qu'après avoir écrit des données avec l'écrivain de flux pour la feuille de calcul, vous devez appeler la méthode Flush
pour mettre fin au processus d'écriture en continu, vous assurer que l'ordre des numéros de ligne est croissant lorsque vous définissez des lignes, et les fonctions de mode normal et les fonctions de mode flux ne peut pas être un travail mélangé à l'écriture de données sur les feuilles de calcul. Le rédacteur de flux essaiera d'utiliser des fichiers temporaires sur le disque pour réduire l'utilisation de la mémoire lorsque les données en mémoire dépassent 16 Mo, et vous ne pouvez pas obtenir la valeur de la cellule pour le moment. Par exemple, définissez des données pour une feuille de calcul de taille 102400
lignes x 50
colonnes avec des nombres et un style:
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)
}
Définissez la valeur de la cellule et la formule de la cellule pour une feuille de calcul avec l'écrivain de flux:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1},
excelize.Cell{Value: 2},
excelize.Cell{Formula: "SUM(A1,B1)"}})
Définissez la valeur de la cellule et le style des lignes d'une feuille de calcul avec le rédacteur de flux:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1}},
excelize.RowOpts{StyleID: styleID, Height: 20, Hidden: false})
Définissez la valeur de la cellule et le niveau de contour de la ligne pour une feuille de calcul avec un rédacteur de flux:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1}}, excelize.RowOpts{OutlineLevel: 1})
Écrire la ligne de feuille au flux
func (sw *StreamWriter) SetRow(cell string, values []interface{}, opts ...RowOpts) error
SetRow écrit un tableau dans la ligne de flux en fonction de la coordonnée de départ donnée et d'un pointeur vers le type de tableau slice
. Notez que vous devez appeler la méthode Flush
pour terminer le processus d'écriture en continu.
Ajouter une table à diffuser
func (sw *StreamWriter) AddTable(table *Table) error
AddTable crée un tableau Excel pour StreamWriter en utilisant la zone de coordonnées et le jeu de formats donnés.
Exemple 1, créez une table de A1:D5
:
err := sw.AddTable(&excelize.Table{Range: "A1:D5"})
Exemple 2, créez une table de F2:H6
avec le format défini:
disable := false
err := sw.AddTable(&excelize.Table{
Range: "F2:H6",
Name: "table",
StyleName: "TableStyleMedium2",
ShowFirstColumn: true,
ShowLastColumn: true,
ShowRowStripes: &disable,
ShowColumnStripes: true,
})
Notez que le tableau doit comporter au moins deux lignes, y compris l'en-tête. Les cellules d'en-tête doivent contenir des chaînes et doivent être uniques. Actuellement, une seule table est autorisée pour un StreamWriter. AddTable
doit être appelé après l'écriture des lignes mais avant Flush
. Voir AddTable
pour plus de détails sur le format de la table.
Insérer un saut de page pour diffuser
func (sw *StreamWriter) InsertPageBreak(cell string) error
InsertPageBreak crée un saut de page pour déterminer où se termine la page imprimée et où commence la suivante par une référence de cellule donnée, le contenu avant le saut de page sera imprimé sur une page et après le saut de page sur une autre.
Définir les volets pour la diffusion en continu
func (sw *StreamWriter) SetPanes(panes *Panes) error
SetPanes fournit une fonction pour créer et supprimer des volets de gel et des volets fractionnés en donnant des options de volets pour le StreamWriter
. Notez que vous devez appeler la fonction SetPanes
avant la fonction SetRow
.
Fusionner la cellule pour diffuser
func (sw *StreamWriter) MergeCell(topLeftCell, bottomRightCell string) error
MergeCell fournit une fonction pour fusionner les cellules par une zone de coordonnées donnée pour StreamWriter. Ne créez pas de cellule fusionnée qui chevauche une autre cellule fusionnée existante.
Définir le style de colonne dans le flux
func (sw *StreamWriter) SetColStyle(minVal, maxVal, styleID int) error
SetColStyle fournit une fonction permettant de définir le style d'une colonne unique ou de plusieurs colonnes pour StreamWriter
. Notez que vous devez appeler la fonction SetColStyle
avant la fonction SetRow
. Par exemple, définissez le style de la colonne H
:
err := sw.SetColStyle(8, 8, style)
Définir la largeur de la colonne dans le flux
func (sw *StreamWriter) SetColWidth(min, max int, width float64) error
SetColWidth fournit une fonction pour définir la largeur d'une seule colonne ou de plusieurs colonnes pour le StreamWriter
. Notez que vous devez appeler la fonction SetColWidth
avant la fonction SetRow
. Par exemple, définissez la colonne de largeur B:C
comme 20
:
err := sw.SetColWidth(2, 3, 20)
Flush le flux
func (sw *StreamWriter) Flush() error
Flush mettant fin au processus d'écriture en streaming.