我有一個代碼可以使用 excel 表并將其轉換為 google 表。它正在作業,但只能復制值。
如何將樣式和范圍(合并的單元格)也復制到谷歌表格?
是否還有一種更簡單的方法來模擬我在谷歌表格上打開檔案的方式?
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// First sheet is created by default, so only set range
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Add a new sheet
AddSheet(sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Get number of rows and columns
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Loop through rows
for (int i = 0; i < rows; i )
{
List<object> lists = new List<object>();
// Loop through each column in selected row
for (int j = 0; j < cols; j )
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
// Define range
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Set values
VRange.Values = list;
// Create request
SpreadsheetsResource.ValuesResource.UpdateRequest upd = sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Execute request
UpdateValuesResponse response = upd.Execute();
// Get response
string responseString = JsonConvert.SerializeObject(response);
}
uj5u.com熱心網友回復:
您似乎正在回圈遍歷 Excel 行以創建一個物件來手動構建 Google 表格。查看 Microsoft檔案,您可能還可以閱讀這些單元格的格式并使用 Sheets API 來應用它,但是,該程序似乎太耗時且容易出錯。
我的建議是讓 Google 為您完成這項作業。Drive API 能夠上傳Excel 檔案并將其轉換為 Google 表格,方法是將 MimeType 設定為application/vnd.google-apps.spreadsheet. 有一些限制,但通常它可以很好地保持單元格格式相同。
Google 的檔案不包含 .NET 示例,我也不是這方面的專家,但是您可以查看他們的 .NET API,其中確實有這些Files.create方法,或者您可以改用他們的REST API。
資料來源:
- 將檔案匯入 Google Docs 型別
- 驅動 API .NET 檔案
- 驅動 REST 檔案
uj5u.com熱心網友回復:
我發現使用 Drive API 而不是 Sheets API 并按原樣上傳檔案,然后獲取鏈接并在 Google 表格中打開它會更好、更容易。
public static string UploadFile(Stream file, string fileName, string fileMime, string fileDescription)
{
DriveService service = GetService();
var driveFile = new Google.Apis.Drive.v3.Data.File();
driveFile.Name = fileName;
driveFile.Description = fileDescription;
driveFile.MimeType = "application/vnd.google-apps.spreadsheet";
var request = service.Files.Create(driveFile, file, driveFile.MimeType);
request.Fields = "id, webViewLink";
var response = request.Upload();
if (response.Status != Google.Apis.Upload.UploadStatus.Completed)
throw response.Exception;
return request.ResponseBody.WebViewLink;
}
private static DriveService GetService()
{
string[] Scopes = { SheetsService.Scope.Drive };
string ApplicationName = "Excel to Google Sheet";
UserCredential credential = null;
using (var stream =
new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
string credPath = "token.json";
var thread = new Thread(() =>
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromStream(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result)
{ IsBackground = false };
thread.Start();
if (!thread.Join(20000))
{
throw new Exception("Timeout exception..!!!");
}
else
{
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
return service;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487069.html
