Streaming-Schreiben
StreamWriter
hat den Typ des Stream-Writers definiert.
type StreamWriter struct {
File *File
Sheet string
SheetID int
// enthält gefilterte oder nicht exportierte Felder
}
Cell
kann direkt in StreamWriter.SetRow
verwendet werden, um einen Stil und einen Wert anzugeben.
type Cell struct {
StyleID int
Formula string
Value interface{}
}
RowOpts
definieren die Optionen für die eingestellte Zeile, sie kann direkt in StreamWriter.SetRow
verwendet werden, um den Stil und die Eigenschaften der Zeile anzugeben.
type RowOpts struct {
Height float64
Hidden bool
StyleID int
OutlineLevel int
}
Stream-Writer abrufen
func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error)
NewStreamWriter gibt die Stream-Writer-Struktur nach dem angegebenen Arbeitsblattnamen zurück, die zum Schreiben von Daten in ein neues vorhandenes leeres Arbeitsblatt mit großen Datenmengen verwendet wird. Beachten Sie, dass Sie nach dem Schreiben von Daten mit dem Stream-Writer für das Arbeitsblatt die Methode Flush
aufrufen müssen, um den Streaming-Schreibvorgang zu beenden. Außerdem müssen Sie sicherstellen, dass die Reihenfolge der Zeilennummern beim Festlegen von Zeilen aufsteigend ist, sowie die Funktionen im Normalmodus und im Stream-Modus Die Arbeit kann nicht mit dem Schreiben von Daten auf die Arbeitsblätter gemischt werden. Der Stream-Writer versucht, temporäre Dateien auf der Festplatte zu verwenden, um die Speichernutzung zu reduzieren, wenn In-Memory-Chunks Daten über 16 MB aufteilen und Sie derzeit keinen Zellenwert erhalten können. Legen Sie beispielsweise Daten für ein Arbeitsblatt mit der Größe 102400
Zeilen x 50
Spalten mit Zahlen und Stil fest:
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)
}
Festlegen des Zellenwerts und der Zellformel für ein Arbeitsblatt mit Stream Writer:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1},
excelize.Cell{Value: 2},
excelize.Cell{Formula: "SUM(A1,B1)"}})
Legen Sie den Zellenwert und den Zeilenstil für ein Arbeitsblatt mit Stream Writer fest:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1}},
excelize.RowOpts{StyleID: styleID, Height: 20, Hidden: false})
Legen Sie den Zellenwert und die Zeilengliederungsebene für ein Arbeitsblatt mit Stream Writer fest:
err := sw.SetRow("A1", []interface{}{
excelize.Cell{Value: 1}}, excelize.RowOpts{OutlineLevel: 1})
Schreiben der Zulaufzeile
func (sw *StreamWriter) SetRow(cell string, values []interface{}, opts ...RowOpts) error
SetRow schreibt ein Array in die Stream-Zeile, indem eine Startkoordinate und ein Zeiger auf den Array-Typ slice
angegeben werden. Beachten Sie, dass Sie die Methode Flush
aufrufen müssen, um den Streaming-Schreibvorgang zu beenden.
Fügen Sie eine Tabelle zum Streamen hinzu
func (sw *StreamWriter) AddTable(table *Table) error
AddTable erstellt eine Excel-Tabelle für den StreamWriter unter Verwendung des angegebenen Koordinatenbereichs und Formatsatzes.
Beispiel 1: Erstellen Sie eine Tabelle mit A1:D5
:
err := sw.AddTable(&excelize.Table{Range: "A1:D5"})
Beispiel 2: Erstellen Sie eine Tabelle mit F2:H6
mit dem folgenden Format:
disable := false
err := sw.AddTable(&excelize.Table{
Range: "F2:H6",
Name: "table",
StyleName: "TableStyleMedium2",
ShowFirstColumn: true,
ShowLastColumn: true,
ShowRowStripes: &disable,
ShowColumnStripes: true,
})
Beachten Sie, dass die Tabelle mindestens zwei Zeilen einschließlich der Kopfzeile enthalten muss. Die Header-Zellen müssen Zeichenfolgen enthalten und eindeutig sein. Derzeit ist nur eine Tabelle für einen StreamWriter zulässig. AddTable
muss aufgerufen werden, nachdem die Zeilen geschrieben wurden, jedoch vor Flush
. Weitere Informationen zum Tabellenformat finden Sie unter AddTable
.
Seitenumbruch zum Streamen einfügen
func (sw *StreamWriter) InsertPageBreak(cell string) error
InsertPageBreak erstellt einen Seitenumbruch, um festzulegen, wo die gedruckte Seite endet und wo die nächste beginnt. Durch einen gegebenen Zellbezug wird der Inhalt vor dem Seitenumbruch auf eine Seite gedruckt und nach dem Seitenumbruch auf eine andere.
Stellen Sie Fensterbereiche auf Stream ein
func (sw *StreamWriter) SetPanes(panes *Panes) error
SetPanes bietet eine Funktion zum Erstellen und Entfernen von Einfrierfenstern und geteilten Fenstern, indem es Fensteroptionen für den StreamWriter
gibt. Beachten Sie, dass Sie die Funktion SetPanes
vor der Funktion SetRow
aufrufen müssen.
Zelle zum Streaming zusammenführen
func (sw *StreamWriter) MergeCell(topLeftCell, bottomRightCell string) error
MergeCell bietet eine Funktion zum Zusammenführen von Zellen nach einem bestimmten Koordinatenbereich für den StreamWriter. Erstellen Sie keine zusammengeführte Zelle, die sich mit einer anderen vorhandenen zusammengeführten Zelle überschneidet.
Festlegen der Spaltenbreite für den Stream
func (sw *StreamWriter) SetColWidth(min, max int, width float64) error
SetColWidth bietet eine Funktion zum Festlegen der Breite einer einzelnen Spalte oder mehrerer Spalten für den StreamWriter
. Beachten Sie, dass Sie die Funktion SetColWidth
vor der Funktion SetRow
aufrufen müssen. Legen Sie beispielsweise die Breitenspalte B:C
als 20
fest:
err := sw.SetColWidth(2, 3, 20)
Flush-Stream
func (sw *StreamWriter) Flush() error
Flush beendet den Streaming-Schreibvorgang.