私はMicrosoft相互運用エクセルを使用して、数秒以内に作成された多くのワークシート(たとえば40)を持っているエクセルワークブックを自動化しています。今は逆の順序でワークシートを提示する必要があります。つまり、最初に作成されたシートです。開いているときに最初に来る必要があります(現在は最後になります)要するに、Excelシートを逆の順序または作成時に並べ替える必要があります
この問題の助け
thnx
私はMicrosoft相互運用エクセルを使用して、数秒以内に作成された多くのワークシート(たとえば40)を持っているエクセルワークブックを自動化しています。今は逆の順序でワークシートを提示する必要があります。つまり、最初に作成されたシートです。開いているときに最初に来る必要があります(現在は最後になります)要するに、Excelシートを逆の順序または作成時に並べ替える必要があります
この問題の助け
thnx
私の知る限り、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
シートを最後のシートの前の1枚から最初のシートに解析し、各シートを最後の位置に移動します。
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);
}
}
}
}