Как загрузить электронную таблицу в Go
Aspose.Cells FOSS для Go загружает существующую рабочую книгу .xlsx в память как Workbook, предоставляя вам полный доступ к её листам и ячейкам через стандартную библиотеку API. Установите модуль с помощью go get перед началом.
Пошаговое руководство
Шаг 1: Установите пакет
go get github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Go/v26Проверьте версию модуля в вашем go.mod после установки.
Шаг 2: Импортируйте необходимые классы
import (
cells_foss "github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Go/v26/aspose/cells_foss"
)Шаг 3: Создать и заполнить рабочую книгу для загрузки
В этом примере сначала создаётся рабочая книга, чтобы иметь реальный .xlsx файл для загрузки — в вашем собственном коде замените путь на существующую таблицу:
wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]
ws.Cells().Set("A1", "Product")
ws.Cells().Set("B1", "Price")
ws.Cells().Set("A2", "Widget A")
ws.Cells().Set("B2", 12.99)
wb.Save("outputfiles/products.xlsx")Шаг 4: Считать значения ячеек из загруженного листа
Получите доступ к первому листу через Worksheets[0] и считайте отдельные ячейки с помощью Cells().Get(ref):
wb := cells_foss.NewWorkbook()
wb.Worksheets[0].Cells().Set("B2", 12.99)
ws2 := wb.Worksheets[0]
cell, err := ws2.Cells().Get("B2")
if err != nil {
fmt.Printf("Error reading cell: %v\n", err)
return
}
fmt.Printf("Price: %v\n", cell.Value)Шаг 5: Перебрать все заполненные ячейки
Используйте Cells().All(), когда нужно пройтись по каждой установленной ячейке, а не считывать известные ссылки по одной:
wb := cells_foss.NewWorkbook()
ws2 := wb.Worksheets[0]
ws2.Cells().Set("A1", "Product")
allCells := ws2.Cells().All()
for ref, c := range allCells {
fmt.Printf("%s = %v\n", ref, c.Value)
}Распространённые проблемы и их решения
Get возвращает ошибку для ссылки на ячейку. Ссылка ещё не установлена в коллекции. Убедитесь, что ячейка была записана с помощью Set, или проверьте возвращённый error явно перед использованием ячейки.
Значения выглядят как неправильный тип. Cell.Value отражает любой тип, переданный в Set (string, int, float64 и т.д.) — проверьте его с помощью type switch, если необходимо ветвиться по базовому типу Go.
Загруженная рабочая книга не содержит данных на ожидаемом листе. Подтвердите, что вы индексируете правильную запись в Worksheets — у книги может быть более одного листа, и целевые данные могут находиться не на Worksheets[0].
Часто задаваемые вопросы
Требуется ли, чтобы оригинальный файл всё ещё существовал на диске при загрузке книги?
Да — Workbook читает из указанного вами пути к файлу. Держите исходный файл доступным на протяжении всей загрузки.
Могу ли я изменить ячейку после загрузки и сохранить изменения?
Да — Cells().Set работает с загруженной книгой так же, как и с только что созданной; вызовите Save ещё раз, чтобы записать изменения.
Есть ли способ избежать загрузки всего файла в память?
Да — используйте StreamingReader.ProcessRows для больших файлов, когда нужно лишь последовательно считывать строки, а не загружать всю рабочую книгу.