SQLの窓

2013年08月29日


C#(.NET) : Google Spreadsheets API version 3.0でGoogleスプレッドシートを参照

Google Spreadsheet は、Google ドライブに作成する事ができる Excel のような仕様の WEB アプリケーションです。WEB 上でデータを保存しておいて、インターネット経由で参照や更新が可能なのが Google Spreadsheets API です。( 他の API では、JavaScript より参照できるものもあます )

Google Spreadsheets API version 3.0

.NET ライブラリのダウンロード
( その他全てへのリンク )



ダウンロードしたライブラリは、直接参照する必要があります。本来 XML データでやりとりするものをライブラリ化しているので、あまり便利なものにはなっていませんが、『スプレッドシート』『ワークシート』を順々に一覧より取得するようにはなっていますので、後から解りやすい仕様ではあります。

ここでは、Dictionary を使って保存する手順を行っていますが、使いやすくするには最初に全てのワークシートまでを Dictionary に保存しておいて、名前で取得できるクラスを作成するといいと思います。

▼ で使った『In Googleドライブ』を公開したもの ( 取引先名は VLOOKUP を シート2から行っています )
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Google.GData.Client;
using Google.GData.Spreadsheets;
using System.Diagnostics;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {

        public SpreadsheetsService service = null;
        public Dictionary<string, SpreadsheetEntry> db_Spread = new Dictionary<string, SpreadsheetEntry>();
        public Dictionary<string, WorksheetEntry> table_Spread = null;

        public Form1()
        {
            InitializeComponent();
        }

        // ********************************************************
        // ログインデータを設定
        // ********************************************************
        private void button1_Click(object sender, EventArgs e)
        {
            service = new SpreadsheetsService("MySpreadsheetIntegration-v1");
            service.setUserCredentials(this.textBox1.Text, this.textBox2.Text);

            Debug.WriteLine(service.ServiceIdentifier.ToString());
            
        }

        // ********************************************************
        // Google Spreadsheet 一覧をディクショナリに保存
        // ********************************************************
        private void button2_Click(object sender, EventArgs e)
        {
            this.listBox1.Items.Clear();

            SpreadsheetQuery query = new SpreadsheetQuery();

            try
            {
                SpreadsheetFeed feed = service.Query(query);
                foreach (SpreadsheetEntry entry in feed.Entries)
                {
                    Debug.WriteLine(entry.Title.Text);
                    this.listBox1.Items.Add(entry.Title.Text);
                    db_Spread.Add(entry.Title.Text, entry);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        // ********************************************************
        // ListBox の対象行をダブルクリックしてディクショナリにシートを保存
        // ********************************************************
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            string target = this.listBox1.SelectedItem.ToString();
            Debug.WriteLine(target);

            try
            {
                SpreadsheetEntry target_Spread = db_Spread[target];

                table_Spread = new Dictionary<string, WorksheetEntry>();
                WorksheetFeed wsFeed = target_Spread.Worksheets;
                foreach (WorksheetEntry entry in wsFeed.Entries)
                {
                    table_Spread.Add(entry.Title.Text, entry);
                    Debug.WriteLine(entry.Title.Text);
                }

                // 先頭シートからデータを取得
                CellQuery cellQuery = new CellQuery(((WorksheetEntry)wsFeed.Entries[0]).CellFeedLink);
                CellFeed cellFeed = service.Query(cellQuery);

                uint nRow = 1;
                string strResult = "";
                foreach (CellEntry cell in cellFeed.Entries)
                {
                    if (nRow == cell.Row)
                    {
                        if (strResult == "")
                        {
                            strResult += cell.Value;
                        }
                        else
                        {
                            strResult += "," + cell.Value;
                        }
                    }
                    else
                    {
                        strResult += "\r\n" + cell.Value;
                    }
                    Debug.WriteLine(cell.Value);

                    nRow = cell.Row;
                }

                this.textBox3.Text = strResult;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
    }
}




【APIの最新記事】
posted by lightbox at 2013-08-29 01:18 | API | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり