2013-08-05 80 views
-1

一個谷歌帳戶,這是我到目前爲止有:下載所有電子表格到Excel中使用C#

// 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

+0

也許「entry.Title.ToString()」包含一些字符不是有效的文件名嗎? –

+0

是否沒有使用某個API調用來代替串聯字符串?這讓我感到很疲倦。 – tuespetre

回答

1

也許這expresion ..

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

不產生有效的文件名?它可能包含無效符號或類似

+0

這是完全正確的。我必須進行正則表達式搜索,替換所有非法字符。 (我不能依靠我的用戶不使用非法的經歷)。 – Kyle

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(); 
} 
+0

然後....將其標記爲答案KKKKKKKK –

相關問題