2011-09-26 33 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); 
       } 
      } 
     } 
    }