Сортировка листа Excel в обратном порядке на основе созданного времени / обратного листа Excel - PullRequest
2 голосов
/ 26 сентября 2011

Я использую Microsoft interop excel для автоматизации рабочего стола Excel, в котором у меня есть много рабочих листов (скажем, 40), которые были созданы с интервалом в секунды или даже меньше, теперь я должен представить рабочий лист в обратном порядке, то есть лист, которыйбыл создан первым должен прийти первым при открытии (в настоящее время он приходит последним), короче говоря, я должен отсортировать лист Excel в обратном порядке или по времени создания

любая помощь в этом вопросе

thnx

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011
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 голосов
/ 28 сентября 2011

Насколько я знаю, 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

Он разбирает листы с одного листа до последнего на первый и перемещает каждый лист в последнюю позицию .

0 голосов
/ 24 октября 2012

Итак, если у вас есть Рабочая тетрадь в файле 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);
                }
            }
        }
    }
...