Den här artikeln tar upp hur du konverterar MS Excel XLS eller XLSX till Google Sheets programmatiskt i C# .NET.
Kalkylblad används vanligtvis för att lagra små eller storskaliga data i form av rader och kolumner. Olika applikationer finns tillgängliga för att skapa och manipulera kalkylblad, av vilka MS Excel är populärt. Utöver det tillhandahåller Google Google Sheets, som används för att skapa och uppdatera kalkylark online. Dessutom låter Google Sheets dig dela kalkylarken med flera personer i realtid. I vissa fall kan du behöva exportera data från Excel XLS- eller XLSX-filer till ett kalkylark i Google Sheets programmatiskt. Så låt oss se hur du kan läsa data från en Excel-fil och skriva den till Google Sheets kalkylblad i C# .NET.
Förutsättningar - Konvertera Excel-fil till Google Sheets i C#
Google Cloud Project
För att kommunicera med Google Sheets måste vi skapa ett projekt på Google Cloud och aktivera Google Sheets API. Följande är stegen för att skapa ett projekt och aktivera API.
- Gå till konsolen Google Cloud.
- Skapa ett nytt projekt på konsolen.
- Välj det projekt du just har skapat.
- Från navigeringsmenyn väljer du API:er och tjänster och sedan Dashboard.
- Klicka på knappen Aktivera API:er och tjänster (se detaljer).
- Sök och aktivera Google Sheets API.
- Konfigurera skärm för OAuth-samtycke och ställ in applikationens omfattning.
- Lägg till testanvändare, som används när applikationen inte publiceras.
- På sidan API och tjänster, gå till inloggningsuppgifter.
- Klicka på knappen Skapa inloggningsuppgifter och välj OAuth-klient-ID.
- I applikationstyp väljer du Desktop App (eftersom vi skapar en konsolapplikation i den här artikeln).
- Ladda ner JSON-filen.
C# .NET API:er för konvertering av Excel till Google Sheets
För att exportera data från Excel XLS/XLSX-filer till Google Sheets behöver vi följande API:er.
- Aspose.Cells för .NET - To read the data from Excel files.
- Google.Apis.Sheets.v4 - To create and update spreadsheets on Google Sheets.
När vi skrev den här artikeln använde vi Aspose.Cells för .NET 22.2 och Google.Apis.Sheets.v4 1.56.0.2608.
Exportera data från Excel XLSX till Google Sheets i C#
Följande är en steg-för-steg-guide om hur du läser data från en Excel XLSX-fil och skriver den till Google Sheets i en C#-konsolapplikation.
- Skapa ett nytt konsolapplikationsprojekt i Visual Studio 2013 eller senare.
- Installera Aspose.Cells för .NET och Google Sheets API:er i projektet.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
Kopiera JSON-filen (vi har laddat ner efter att ha skapat autentiseringsuppgifter i Google Cloud) och klistra in den i projektets katalog.
Initiera Google Sheets-tjänsten med hjälp av användaruppgifterna (JSON-fil) och definiera programmets omfattning. Omfattningarna definierar åtkomstbehörigheterna till arken och deras egenskaper. Följande funktion initierar Google Sheets-tjänsten och returnerar SheetsService-objektet.
using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Services;
using Google.Apis.Util.Store;
public static SheetsService ConnectToGoogle()
{
// Om du ändrar dessa omfång, radera dina tidigare sparade autentiseringsuppgifter
// på ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
string[] Scopes = { SheetsService.Scope.Spreadsheets };
string ApplicationName = "Excel to Google Sheet";
UserCredential credential;
using (var stream =
new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
// Filen token.json lagrar användarens åtkomst- och uppdateringstoken och skapas
// automatiskt när auktoriseringsflödet slutförs för första gången.
string credPath = "token.json";
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromStream(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
// Skapa Google Sheets API-tjänst
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
return service;
}
- Skapa CreateSpreadsheet-funktion som skapar ett nytt kalkylblad på Google Sheets, anger namnet på standardarket och returnerar ett Spreadsheet-objekt.
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
{
// Skapa ett nytt kalkylblad
var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
newSpreadSheet.Properties = new SpreadsheetProperties();
newSpreadSheet.Properties.Title = _spreadsheetName;
// Skapa ett nytt ark
var sheet = new Sheet();
sheet.Properties = new SheetProperties();
sheet.Properties.Title = _defaultSheetName;
newSpreadSheet.Sheets = new List<Sheet>() { sheet };
// Utför begäran
var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();
return newSheet;
}
- Skapa en AddSheet-funktion för att lägga till ett nytt ark i Googles kalkylark.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
// Lägg till nytt ark
var addSheetRequest = new AddSheetRequest();
addSheetRequest.Properties = new SheetProperties();
addSheetRequest.Properties.Title = _sheetName;
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
batchUpdateSpreadsheetRequest.Requests = new List<Request>();
batchUpdateSpreadsheetRequest.Requests.Add(new Request
{
AddSheet = addSheetRequest
});
// Skapa förfrågan
var batchUpdateRequest =
_sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);
// Utför begäran
var response = batchUpdateRequest.Execute();
}
- Skapa nu en ny funktion ExportDataFromExcelToGoogleSheet, som läser och exporterar data från en Excel-fil till Google Sheets. I den här funktionen laddar du först Excel XLS/XLSX-filen med Aspose.Cells för .NET och hämtar namnet på det första kalkylbladet i arbetsboken.
// Ladda en Excel-arbetsbok
Workbook wb = new Workbook(_excelFileName);
// Hämta namnet på det första arbetsbladet
string defaultWorksheetName = wb.Worksheets[0].Name;
- Anropa sedan CreateSpreadsheet-funktionen för att skapa ett nytt kalkylblad på Google Sheets.
// Skapa ett nytt Google-kalkylblad med standardkalkylblad
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
- Bläddra igenom kalkylbladen i Excel-filen. Läs data från kalkylbladet i varje iteration och lägg till det i en lista.
// Bläddra igenom arbetsblad
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// Första arket skapas som standard, så ställ bara in intervall
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Lägg till ett nytt ark
AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Få antal rader och kolumner
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Slinga genom rader
for (int i = 0; i < rows; i++)
{
List<object> lists = new List<object>();
// Gå igenom varje kolumn i den valda raden
for (int j = 0; j < cols; j++)
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
}
- Skapa en begäran om att skriva data till kalkylarket i Google Sheets för varje kalkylblad i Excel-filen.
// Definiera intervall
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Ställ in värden
VRange.Values = list;
// Skapa förfrågan
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Utför begäran
UpdateValuesResponse response = upd.Execute();
// Få svar
string responseString = JsonConvert.SerializeObject(response);
Den kompletta funktionen för att exportera data från en Excel-fil till ett kalkylblad i Google Sheets ges nedan.
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Aspose.Cells;
public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
{
// Ladda en Excel-arbetsbok
Workbook wb = new Workbook(_excelFileName);
// Hämta namnet på det första arbetsbladet
string defaultWorksheetName = wb.Worksheets[0].Name;
// Skapa ett nytt Google-kalkylblad med standardkalkylblad
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
Console.WriteLine("URL: " + spreadhsheet.SpreadsheetUrl);
Console.WriteLine("ID: " + spreadhsheet.SpreadsheetId);
// Definiera intervall
String range;
// Bläddra igenom arbetsblad
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// Första arket skapas som standard, så ställ bara in intervall
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Lägg till ett nytt ark
AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Få antal rader och kolumner
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Slinga genom rader
for (int i = 0; i < rows; i++)
{
List<object> lists = new List<object>();
// Gå igenom varje kolumn i den valda raden
for (int j = 0; j < cols; j++)
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
// Definiera intervall
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Ställ in värden
VRange.Values = list;
// Skapa förfrågan
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Utför begäran
UpdateValuesResponse response = upd.Execute();
// Få svar
string responseString = JsonConvert.SerializeObject(response);
}
}
Komplett källkod
Följande är den fullständiga källkoden för att konvertera en Excel XLSX-fil till Google Sheets i C#.
using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System.IO;
using System.Threading;
using Newtonsoft.Json;
using Aspose.Cells;
namespace ExcelToGoogle
{
class Program
{
static void Main(string[] args)
{
// Anslut till Google
SheetsService sheetService = ConnectToGoogle();
// Exportera data från Excel-fil till Google Sheets
ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");
Console.ReadKey();
}
public static SheetsService ConnectToGoogle()
{
// Om du ändrar dessa omfång, radera dina tidigare sparade autentiseringsuppgifter
// på ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
string[] Scopes = { SheetsService.Scope.Spreadsheets };
string ApplicationName = "Excel to Google Sheet";
UserCredential credential;
using (var stream =
new FileStream("credentials1.json", FileMode.Open, FileAccess.Read))
{
// Filen token.json lagrar användarens åtkomst- och uppdateringstoken och skapas
// automatiskt när auktoriseringsflödet slutförs för första gången.
string credPath = "token.json";
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromStream(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
// Skapa Google Sheets API-tjänst
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
return service;
}
public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
{
// Ladda en Excel-arbetsbok
Workbook wb = new Workbook(_excelFileName);
// Hämta namnet på det första arbetsbladet
string defaultWorksheetName = wb.Worksheets[0].Name;
// Skapa ett nytt Google-kalkylblad med standardkalkylblad
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
Console.WriteLine("Spreadsheet URL: " + spreadhsheet.SpreadsheetUrl);
Console.WriteLine("ID: " + spreadhsheet.SpreadsheetId);
// Definiera intervall
String range;
// Bläddra igenom arbetsblad
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// Första arket skapas som standard, så ställ bara in intervall
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Lägg till ett nytt ark
AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Få antal rader och kolumner
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Slinga genom rader
for (int i = 0; i < rows; i++)
{
List<object> lists = new List<object>();
// Gå igenom varje kolumn i den valda raden
for (int j = 0; j < cols; j++)
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
// Definiera intervall
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Ställ in värden
VRange.Values = list;
// Skapa förfrågan
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Utför begäran
UpdateValuesResponse response = upd.Execute();
// Få svar
string responseString = JsonConvert.SerializeObject(response);
}
}
public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
{
// Skapa ett nytt kalkylblad
var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
newSpreadSheet.Properties = new SpreadsheetProperties();
newSpreadSheet.Properties.Title = _spreadsheetName;
// Skapa ett nytt ark
var sheet = new Sheet();
sheet.Properties = new SheetProperties();
sheet.Properties.Title = _defaultSheetName;
newSpreadSheet.Sheets = new List<Sheet>() { sheet };
// Utför begäran
var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();
return newSheet;
}
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
// Lägg till nytt ark
var addSheetRequest = new AddSheetRequest();
addSheetRequest.Properties = new SheetProperties();
addSheetRequest.Properties.Title = _sheetName;
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
batchUpdateSpreadsheetRequest.Requests = new List<Request>();
batchUpdateSpreadsheetRequest.Requests.Add(new Request
{
AddSheet = addSheetRequest
});
// Skapa förfrågan
var batchUpdateRequest =
_sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);
// Utför begäran
var response = batchUpdateRequest.Execute();
}
}
}
Demo - Konvertera Excel till Google Sheets i C#
Skaffa en gratis Aspose.Cells-licens
Du kan få en gratis tillfällig licens och använda Aspose.Cells för .NET utan utvärderingsbegränsningar.
Slutsats
I den här artikeln har du lärt dig hur du konverterar Excel XLS- eller XLSX-filer till Google Sheets i C#. Vi har tagit upp hur man skapar ett projekt på Google Cloud, aktiverar Google Sheets API, läser Excel-filer och exporterar data från Excel-filer till Google Sheets. Dessutom kan du utforska andra funktioner i Aspose.Cells för .NET med hjälp av dokumentationen. Du kan också ställa dina frågor via vårt forum.