цикл через определенные столбцы Excel с помощью Go - PullRequest
0 голосов
/ 24 октября 2018

В моем коде ниже я использую библиотеку exclize для чтения данных из таблицы Excel.

Моя проблема в том, что метод .GetRows читаетболее полный лист, когда меня интересует только получение данных из нескольких столбцов.

Просматривая goDoc Я не смог найти метод, который дает вам данные, основанные на индексе столбца или имени.

Есть ли способ, несмотря на это, чтобы прочитать данные только из нескольких выбранных столбцов?Или ограничьте диапазон метода .GetRows

Вот код:

package main 

import (
    "fmt"

    "github.com/360EntSecGroup-Skylar/excelize"
)

type AllData struct {
    Name, Team, SSN string
}

var mapping []AllData

func main() {

    fileName := "Blad1"

    xlsx, err := excelize.OpenFile(fileName + ".xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }

    rows := xlsx.GetRows(fileName)
    for _, row := range rows[1:] {
        mapping = append(mapping, AllData{ Name: row[0] })
    }

    m := map[string]interface{}{
        "Data": mapping,
    }

    fmt.Println(m["Data"])
}

1 Ответ

0 голосов
/ 24 октября 2018

Похоже, что есть по крайней мере еще пара способов

с помощью итератора строк

rows, err := xlsx.Rows("Sheet1")
if err != nil {
    log.Fatal(err)
}
for rows.Next() {
    row := rows.Columns()
    fmt.Printf("%s\t%s\n", row[1], row[3]) // Print values in columns B and D
}

или если вы знаете точный диапазон

n := 10001
for i := 1; i < n; i++ {
    b := xlsx.GetCellValue("Sheet1", fmt.Sprintf("B%d", i))
    d := xlsx.GetCellValue("Sheet1", fmt.Sprintf("D%d", i))

    fmt.Printf("%s\t%s\n", b, d) // Print values in columns B and D
}

Я не изучал источник библиотеки, поэтому он может или не может иметь значение с точки зрения производительности и (или) использования памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...