根据创建时间的反向顺序对excel表格进行排序/对excel表格进行反向排序

本文关键字:表格 排序 excel 顺序 创建 时间 | 更新日期: 2023-09-27 18:09:49

我使用微软互操作excel来自动化excel工作簿在其中,我有许多工作表(说40)已创建在秒的差距,甚至更少现在我必须以相反的顺序呈现工作表,即首先创建的工作表在打开时应该首先出现(目前它是最后出现),简而言之,我必须按反向顺序或按创建时间对excel工作表进行排序

在这件事上有什么帮助

感谢

根据创建时间的反向顺序对excel表格进行排序/对excel表格进行反向排序

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);
        }

据我所知,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

它从最后一个工作表之前的一个工作表解析到第一个工作表,并将每个工作表移动到最后一个位置

所以,如果你有一个工作表的工作簿在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);
                }
            }
        }
    }