您的位置:首页 > 娱乐 > 明星 > 软件开发是什么职业_开发网站合同_网站定制设计_拉新人拿奖励的app

软件开发是什么职业_开发网站合同_网站定制设计_拉新人拿奖励的app

2025/7/15 12:25:15 来源:https://blog.csdn.net/D1124615130/article/details/145760459  浏览:    关键词:软件开发是什么职业_开发网站合同_网站定制设计_拉新人拿奖励的app
软件开发是什么职业_开发网站合同_网站定制设计_拉新人拿奖励的app

如何访问google sheet、读接口详见
Golang访问Google Sheet

import ("bytes""context""fmt""golang.org/x/oauth2/google""google.golang.org/api/option""google.golang.org/api/sheets/v4""runtime/debug"
)type UpdateGoogleSheetByRangeReq struct {Credentials   []byteSpreadsheetId stringSheetName     stringExcelItemList interface{}
}func UpdateGoogleSheetByRangeSrv(ctx context.Context, req *UpdateGoogleSheetByRangeReq) (wfmErr *wfmerror.WFMError) {defer func() {if p := recover(); p != nil {logger.LogErrorf("UpdateGoogleSheetByRangeReq panic=%v, stack=%v", p, string(debug.Stack()))wfmErr = constant.ErrCommonSystemUnknownErr.NewMessage(fmt.Sprintf("panic=%v", p))}}()// 解析密钥文件config, err := google.JWTConfigFromJSON(req.Credentials, sheets.SpreadsheetsScope)if err != nil {return constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}// 创建 Google Sheets 服务客户端client := config.Client(ctx)// 创建 Sheets 服务对象sheetsService, err := sheets.NewService(ctx, option.WithHTTPClient(client))if err != nil {return constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}data, rErr := readXLSX(req.ExcelItemList)if rErr != nil {return rErr.Mark()}exists, sErr := sheetExists(sheetsService, req.SpreadsheetId, req.SheetName)if sErr != nil {return sErr.Mark()}//不存在就创建,存在清除if exists {if cErr := clearSheet(sheetsService, req.SpreadsheetId, req.SheetName); cErr != nil {return cErr.Mark()}} else {if cErr := createSheet(sheetsService, req.SpreadsheetId, req.SheetName); cErr != nil {return cErr.Mark()}}// 使用 Sheets 服务对象进行操作readRange := fmt.Sprintf("%s!A1", req.SheetName)// 通过 Sheets 服务对象获取指定的工作表_, err = sheetsService.Spreadsheets.Values.Update(req.SpreadsheetId, readRange, &sheets.ValueRange{Values: data,}).ValueInputOption("RAW").Do()if err != nil {return constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}return nil
}func readXLSX(ExcelItem interface{}) ([][]interface{}, *wfmerror.WFMError) {sheetName := "sheet1"//将ExcelItem转换为xlsx []bytefileData, _, gErr := excel.GenerateExcelBytes("excel.xlsx", []*dto.ExcelSheetTab{{SheetName: sheetName,Data:      ExcelItem,},})if gErr != nil {return nil, gErr.Mark()}f, err := excelize.OpenReader(bytes.NewReader(fileData))if err != nil {return nil, constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}rows, err := f.GetRows(sheetName) // 选择要读取的工作表if err != nil {return nil, constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}data := make([][]interface{}, len(rows))for i, row := range rows {data[i] = make([]interface{}, len(row))for j, cell := range row {data[i][j] = cell}}return data, nil
}func sheetExists(srv *sheets.Service, spreadsheetId, sheetName string) (bool, *wfmerror.WFMError) {// 获取电子表格的结构spreadsheet, err := srv.Spreadsheets.Get(spreadsheetId).Do()if err != nil {return false, constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}// 检查工作表是否存在for _, sheet := range spreadsheet.Sheets {if sheet.Properties.Title == sheetName {return true, nil}}return false, nil
}func createSheet(srv *sheets.Service, spreadsheetId, sheetName string) *wfmerror.WFMError {// 创建新的工作表requests := []*sheets.Request{{AddSheet: &sheets.AddSheetRequest{Properties: &sheets.SheetProperties{Title: sheetName,},},},}batchUpdateRequest := &sheets.BatchUpdateSpreadsheetRequest{Requests: requests,}_, err := srv.Spreadsheets.BatchUpdate(spreadsheetId, batchUpdateRequest).Do()if err != nil {return constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}return nil
}func clearSheet(srv *sheets.Service, spreadsheetId, sheetName string) *wfmerror.WFMError {// 清空整个工作表的范围rangeToClear := fmt.Sprintf("%s!A:Z", sheetName) // 假设工作表的范围是 A 到 Z 列// 创建清空请求clearValuesRequest := &sheets.ClearValuesRequest{}_, err := srv.Spreadsheets.Values.Clear(spreadsheetId, rangeToClear, clearValuesRequest).Do()if err != nil {return constant.ErrCommonSystemUnknownErr.NewMessage(err.Error())}return nil
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com