0

これは私がこれまでに持っているものです:

// calls a new service and authenticate
SpreadsheetsService myService = new SpreadsheetsService("MyDownloader");
myService.setUserCredentials(DownloaderSettings.Default.Username,
    DownloaderSettings.Default.Password);

// get a list of spreadsheets
SpreadsheetQuery query = new SpreadsheetQuery();
SpreadsheetFeed feed = myService.Query(query);

// download them all
foreach (SpreadsheetEntry entry in feed.Entries)
{
    string key = entry.AlternateUri
                      .Content
                      .Substring(entry.AlternateUri.Content.IndexOf("?key="));
    string dlUrl = "https://docs.google.com/feeds/download/spreadsheets/Export"
                   + key
                   + "&exportFormat=" + DownloaderSettings.Default.FileFormat
                   + "&format=" + DownloaderSettings.Default.FileFormat;

    Stream stream = myService.Query(new Uri(dlUrl));

    using (FileStream fstream = new FileStream(entry.Title.ToString() + "."
           + DownloaderSettings.Default.FileFormat),
           FileMode.Create,
           FileAccess.ReadWrite,
           FileShare.ReadWrite))
    {
        stream.CopyTo(fstream);
        fstream.Flush();
    }
}

アカウント内のすべてのスプレッドシートのリストを取得し、すべてを にダウンロードしたいと考えていますxlsx。アカウントには約 10 個のスプレッドシートがあります。デバッグを押しても作成されません。

編集

役に立ったら、スクリーンショット: http://i.imgur.com/wyPZ5jz.png

4

2 に答える 2

1

多分この表現…

entry.Title.ToString() + "." + DownloaderSettings.Default.FileFormat

有効なファイル名を生成していませんか? 無効な記号などが含まれている可能性があります

于 2013-08-05T04:24:46.533 に答える
0

Mauricio Gracia の提案に従って、一部のシート名に不正な文字が含まれていることがわかりました。これは私にとってはうまくいきました。

Stream stream = myService.Query(new Uri(dlUrl));

// declare the file name, replacing invalid characters
string fileName = entry.Title.Text;
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
fileName = r.Replace(fileName, "_");

using (FileStream fstream = new FileStream(fileName +  "." + DownloaderSettings.Default.FileFormat,
    FileMode.Create,
    FileAccess.ReadWrite,
    FileShare.ReadWrite))
{
    stream.CopyTo(fstream);
    fstream.Flush();
}
于 2013-08-05T05:26:35.473 に答える