Den här artikeln tar upp hur du konverterar MS Excel XLS eller XLSX till Google Sheets programmatiskt i C# .NET.

Konvertera Excel XLS eller XLSX till Google Sheets 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.

  1. Gå till konsolen Google Cloud.
  2. Skapa ett nytt projekt på konsolen.
    • Välj det projekt du just har skapat.
  3. 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.
  4. 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.
  5. 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.

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.

  1. Skapa ett nytt konsolapplikationsprojekt i Visual Studio 2013 eller senare.
Exportera data från Excel XLSX till Google Sheets i C#
  1. 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
  1. Kopiera JSON-filen (vi har laddat ner efter att ha skapat autentiseringsuppgifter i Google Cloud) och klistra in den i projektets katalog.

  2. 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;
}
  1. 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;
}
  1. 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();

}
  1. 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;
  1. 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);
  1. 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);
    }
}
  1. 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.

Se även