2011-09-26 36 views
2

我使用Microsoft interop excel來自動執行excel工作簿 ,其中我有很多工作表(比如40),它們已經在幾秒鐘內創建出來了或更少 現在我必須以相反的順序呈現工作表,即首先創建的工作表首先應當在打開時(現在是最後一個)第一個應該先打印出來,總之我必須按相反順序或創建時間對Excel工作表進行排序在創建時間的基礎上以相反順序排序Excel表格

在這個問題上的任何幫助

日Thnx

回答

2
Workbook wb = app.Workbooks.Open(Form1.strRecentFilename, temp, temp, temp, temp, temp, temp, temp, temp, temp, temp, temp, temp, temp, temp); 
     int count = wb.Worksheets.Count; 
     Worksheet ws, lastws; 
     lastws = (Worksheet)wb.Worksheets[count]; 
     MessageBox.Show(lastws.Name); 
     for (int i = count - 1; i >= 1; i--) 
     { 
      lastws = (Worksheet)wb.Worksheets[count]; 
      ws = (Worksheet)wb.Worksheets[i]; 
      ws.Move(System.Reflection.Missing.Value, lastws); 
     } 
2

據我所知,Excel不存儲每張紙的創建日期和時間。但是,每張工作簿的末尾都會添加每張新工作表。
所以,你可以根據這個假設來改變順序。

這裏是一個VBA宏要做到這一點,你就必須去適應它互操作或C#:

Sub reverseOrder() 
Dim i As Integer 
For i = Worksheets.Count - 1 To 1 Step -1 
    Worksheets(i).Move After:=Worksheets(Worksheets.Count) 
Next i 
End Sub 

它解析從一頁上最後一個到第一個前移動每個表到最後的位置

+1

不知創建以相反的順序可能是一個好主意的表?如果選中第一個工作表,則Sheet.Add的默認值爲Before。 – Fionnuala

+1

@Remou:這也是一個好主意。我從OP的問題中瞭解到,他不能在創建工作表時干預工作簿,但是隻能在之後進行。因此我的解決方案 – JMax

+0

@JMax真的..我想遍歷所有表後創建.. 讓我看看,如果它的作品..... – 1Mayur

0

所以,如果你有工作簿的工作表中的Excel文件,你需要理清工作表字母:

public void SortWs() 
    { 
     List<Worksheet> for_sort = new List<Worksheet>(); 

     foreach (Worksheet ws in wb.Worksheets) 
     { 
      for_sort.Add(ws); 
     } 

     for_sort.Sort(delegate(Worksheet wst1, Worksheet wst2) 
     { 
      return wst1.Name.CompareTo(wst2.Name);//sort by worksheet's name 
     }); 

     Worksheet ws1, ws2; 

     for (int i = 0; i < for_sort.Count; i++) 
     { 
      for (int j = 1; j <= wb.Worksheets.Count; j++) 
      { 
       ws1 = (Worksheet)wb.Worksheets[j]; 
       if (for_sort[i].Name == ws1.Name) 
       { 
        ws2 = (Worksheet)wb.Worksheets[i+1]; 
        ws1.Move(ws2, Type.Missing); 
       } 
      } 
     } 
    }