基于创建的时间/反转Excel工作表以相反的顺序对Excel工作表进行排序

时间:2011-09-26 18:40:09

标签: c# excel excel-2007 worksheet-function excel-interop

我正在使用Microsoft interop excel来自动化excel workboook 其中我有很多工作表(比如说40),这些工作表是以秒为单位创建的,甚至更少 现在我必须以相反的顺序呈现工作表,即首先创建的工作表应该在打开时首先出现(当前它是最后一个)总之我必须以相反的顺序或创建时间对Excel工作表进行排序

此事的任何帮助

日Thnx

3 个答案:

答案 0 :(得分:2)

据我所知, Excel不会存储每张表的创建日期和时间。然而,每张工作簿的末尾都会添加新的工作表 因此,您可以根据此假设撤消订单。

这是一个VBA宏来执行此操作,您只需将其调整为interop或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 :(得分: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 :(得分: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);
                }
            }
        }
    }