### 回答1: 使用golang读取超大Excel可以使用第三方库"github.com/360EntSecGroup-Skylar/excelize"。它支持读取XLSX格式的Excel文件。 读取Excel文件的方式如下: package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize" ) func main() { f, err := excelize.OpenFile("./test.xlsx") if err != nil { fmt.Println(err) return } // 读取指定sheet中的数据 rows := f.GetRows("Sheet1") for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println() } } 随机取20W行数据可以使用rand包来实现。在读取Excel文件之后,可以使用rand.Perm函数来生成随机数组,然后根据随机数组中的索引来取出数据。 代码示例如下: package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize" "math/rand" "time" ) func main() { f, err := excelize.OpenFile("./test.xlsx") if err != nil { fmt.Println(err) return } // 读取指定sheet中的数据 rows := f.GetRows("Sheet1") rand.Seed(time.Now().UnixNano()) // 随机取20W行数据 numRows := len(rows) randIndex := rand.Perm(numRows)[:20000] for _, index := range randIndex { row := rows[index] for _, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println() } } 这里虽然给出了一个例子,但是对于100列100W行的数据来说,用上述方式读取性能可能会有影响,建议考虑到数 ### 回答2: 使用golang读取超大Excel文件并随机获取其中的20W行数据,可以通过以下步骤: 1. 使用go语言中的Excel文件处理库(如excelize)打开Excel文件。 2. 获取Excel文件的行数和列数。 3. 根据行数随机生成20W个不重复的行索引值,并将这些索引值存储在一个切片中。 4. 遍历切片中的索引值,读取对应行的数据。 5. 将读取到的数据保存到一个新的Excel文件中,作为结果输出。 以下是一个示例代码,用于演示如何使用golang读取超大Excel文件并随机获取20W行数据: go package main import ( "fmt" "math/rand" "github.com/xuri/excelize/v2" ) func main() { // 打开Excel文件 f, err := excelize.OpenFile("path/to/large_excel.xlsx") if err != nil { fmt.Println(err) return } // 获取Excel文件的行数和列数 rows, _ := f.GetRows("Sheet1") rowCount := len(rows) colCount := len(rows[0]) // 创建一个切片用于存储随机生成的行索引值 var randomIndexes []int // 随机生成20W个不重复的行索引值 for i := 0; i < 200000; { index := rand.Intn(rowCount) // 如果生成的索引值已存在于切片中,则重新生成 if !contains(randomIndexes, index) { randomIndexes = append(randomIndexes, index) i++ } } // 创建一个新的Excel文件用于保存随机获取到的数据 newFile := excelize.NewFile() newSheet := "RandomData" // 遍历随机生成的行索引值,读取对应行的数据并保存到新的Excel文件中 for i, index := range randomIndexes { for j := 0; j < colCount; j++ { cell, _ := f.GetCellValue("Sheet1", getCellName(j, index)) newFile.SetCellValue(newSheet, getCellName(j, i), cell) } } // 保存新的Excel文件 err = newFile.SaveAs("path/to/random_data.xlsx") if err != nil { fmt.Println(err) return } fmt.Println("随机数据已保存到新的Excel文件中") } // 判断切片中是否包含某个值 func contains(s []int, e int) bool { for _, v := range s { if v == e { return true } } return false } // 根据列索引和行索引获取对应的单元格名称 func getCellName(colIndex, rowIndex int) string { colName := string('A' + colIndex) return fmt.Sprintf("%s%d", colName, rowIndex+1) } 在上述示例中,使用excelize库打开Excel文件并获取行数和列数。然后,通过随机生成不重复的行索引值来模拟获取随机行的数据。最后,将读取到的数据保存到一个新的Excel文件中。 请根据实际需求修改代码中的文件路径和行列数等参数。注意,读取和保存超大Excel文件可能会消耗大量的内存和时间,请确保系统资源充足。 ### 回答3: 使用golang读取超大Excel文件,并随机选择其中20万行数据的方法如下: 1. 首先,我们需要安装和导入golang对Excel文件操作的包,推荐使用github.com/tealeg/xlsx包。首先使用以下命令安装该包: go get github.com/tealeg/xlsx 2. 导入所需的包: import ( "github.com/tealeg/xlsx" "math/rand" ) 3. 创建一个Excel文件对象: file, err := xlsx.OpenFile("your_excel_file.xlsx") if err != nil { log.Fatal(err) } 4. 选择要读取的工作表: sheet := file.Sheets[0] 5. 获取工作表中的所有行: rows := sheet.Rows 6. 计算工作表中总共有多少行数据: totalRows := len(rows) 7. 创建一个存储随机行索引的切片: randIndexes := rand.Perm(totalRows)[:200000] 8. 遍历切片中的随机行索引,读取并处理对应行的数据: for _, rowIndex := range randIndexes { row := rows[rowIndex] // 处理行数据 } 以上步骤就可以使用golang读取超大Excel文件并随机选择20万行数据。这里使用了第三方包github.com/tealeg/xlsx,在第4步我们选择了要读取的工作表,在第5步通过Sheet对象的Rows属性获取了所有行数据,在第6步我们计算了总共有多少行数据。在第7步我们使用rand.Perm函数生成了一个随机排列的数字切片,然后根据切片中的索引获取对应的行数据,处理行数据的部分可以根据具体需求进行编写。通过这种方式,我们可以读取超大Excel文件中的随机行数据。