Reading Workbooks

Opening a File

wb, err := werkbook.Open("report.xlsx")
if err != nil {
    log.Fatal(err)
}

Reading Cell Values

Read individual cells by A1 reference:

sheet := wb.Sheet("Sheet1")

v, err := sheet.GetValue("A1")
if err != nil {
    log.Fatal(err)
}

fmt.Println(v.Raw())     // underlying Go value
fmt.Println(v.Type)      // werkbook.TypeString, TypeNumber, etc.
fmt.Println(v.IsEmpty()) // true if cell is empty

Checking Value Types

Use the Type field to handle different value types:

v, _ := sheet.GetValue("A1")

switch v.Type {
case werkbook.TypeNumber:
    fmt.Printf("Number: %f\n", v.Number)
case werkbook.TypeString:
    fmt.Printf("String: %s\n", v.String)
case werkbook.TypeBool:
    fmt.Printf("Bool: %t\n", v.Bool)
case werkbook.TypeError:
    fmt.Printf("Error: %s\n", v.String)
case werkbook.TypeEmpty:
    fmt.Println("(empty)")
}

Reading Formulas

formula, _ := sheet.GetFormula("D5")
if formula != "" {
    fmt.Println("Formula:", formula) // e.g. "SUM(D2:D4)"
}

// GetValue on a formula cell returns the computed result
value, _ := sheet.GetValue("D5")
fmt.Println("Result:", value.Raw())

Iterating Over Rows

Use the Rows() iterator to walk through all non-empty rows:

for row := range sheet.Rows() {
    fmt.Printf("Row %d:\n", row.Num())

    for _, cell := range row.Cells() {
        colName := werkbook.ColumnNumberToName(cell.Col())
        fmt.Printf("  %s%d = %v\n", colName, row.Num(), cell.Value().Raw())
    }
}

Sheet Dimensions

maxRow := sheet.MaxRow() // highest row number with data, or 0
maxCol := sheet.MaxCol() // highest column number with data, or 0

fmt.Printf("Data range: A1:%s%d\n",
    werkbook.ColumnNumberToName(maxCol), maxRow)

Listing Sheets

for _, name := range wb.SheetNames() {
    sheet := wb.Sheet(name)
    fmt.Printf("Sheet %q: %d rows, %d cols\n",
        name, sheet.MaxRow(), sheet.MaxCol())
}

Reading Styles

style, _ := sheet.GetStyle("A1")
if style != nil {
    if style.Font != nil {
        fmt.Printf("Font: %s, size %.0f\n", style.Font.Name, style.Font.Size)
        fmt.Printf("Bold: %t\n", style.Font.Bold)
    }
    if style.Fill != nil {
        fmt.Printf("Fill color: #%s\n", style.Fill.Color)
    }
}

Printing a Sheet

For quick debugging, print a human-readable table:

sheet.PrintTo(os.Stdout)