我正在使用 Microsoft interop excel 来自动化 excel 工作簿,其中我有许多工作表(比如 40 个),这些工作表是在几秒钟内创建的,甚至更少现在我必须以相反的顺序呈现工作表,即首先创建的工作表应该在打开时排在第一位(目前它排在最后)简而言之我必须以相反的顺序或按创建时间对excel表进行排序
在这件事上有任何帮助
谢谢
我正在使用 Microsoft interop excel 来自动化 excel 工作簿,其中我有许多工作表(比如 40 个),这些工作表是在几秒钟内创建的,甚至更少现在我必须以相反的顺序呈现工作表,即首先创建的工作表应该在打开时排在第一位(目前它排在最后)简而言之我必须以相反的顺序或按创建时间对excel表进行排序
在这件事上有任何帮助
谢谢
据我所知,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
它从最后一张之前的一张到第一张解析工作表,并将每张工作表移动到最后一个位置。
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 文件中有工作簿的工作表,并且您需要对工作表字母表进行排序:
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);
}
}
}
}