我使用Microsoft interop excel來自動執行excel工作簿 ,其中我有很多工作表(比如40),它們已經在幾秒鐘內創建出來了或更少 現在我必須以相反的順序呈現工作表,即首先創建的工作表首先應當在打開時(現在是最後一個)第一個應該先打印出來,總之我必須按相反順序或創建時間對Excel工作表進行排序在創建時間的基礎上以相反順序排序Excel表格
在這個問題上的任何幫助
日Thnx
我使用Microsoft interop excel來自動執行excel工作簿 ,其中我有很多工作表(比如40),它們已經在幾秒鐘內創建出來了或更少 現在我必須以相反的順序呈現工作表,即首先創建的工作表首先應當在打開時(現在是最後一個)第一個應該先打印出來,總之我必須按相反順序或創建時間對Excel工作表進行排序在創建時間的基礎上以相反順序排序Excel表格
在這個問題上的任何幫助
日Thnx
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);
}
}
}
}
不知創建以相反的順序可能是一個好主意的表?如果選中第一個工作表,則Sheet.Add的默認值爲Before。 – Fionnuala
@Remou:這也是一個好主意。我從OP的問題中瞭解到,他不能在創建工作表時干預工作簿,但是隻能在之後進行。因此我的解決方案 – JMax
@JMax真的..我想遍歷所有表後創建.. 讓我看看,如果它的作品..... – 1Mayur