Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据创建的时间按相反顺序排序excel工作表/反转excel工作表_C#_Excel_Excel 2007_Worksheet Function_Excel Interop - Fatal编程技术网

C# 根据创建的时间按相反顺序排序excel工作表/反转excel工作表

C# 根据创建的时间按相反顺序排序excel工作表/反转excel工作表,c#,excel,excel-2007,worksheet-function,excel-interop,C#,Excel,Excel 2007,Worksheet Function,Excel Interop,我正在使用Microsoft interop excel自动化excel workboook 其中我有很多工作表(比如说40),它们是在几秒钟甚至更短的时间内创建的 现在我必须以相反的顺序呈现工作表,即首先创建的工作表在打开时应排在第一位(目前是最后一位)。简言之,我必须以相反的顺序或按创建时间对excel工作表进行排序 在这件事上有什么帮助吗 thnx据我所知,Excel不存储每张工作表的创建日期和时间。然而,每一张新工作表都会添加到工作簿的每一页末尾。 所以,你可以根据这个假设来颠倒顺序 这

我正在使用Microsoft interop excel自动化excel workboook 其中我有很多工作表(比如说40),它们是在几秒钟甚至更短的时间内创建的 现在我必须以相反的顺序呈现工作表,即首先创建的工作表在打开时应排在第一位(目前是最后一位)。简言之,我必须以相反的顺序或按创建时间对excel工作表进行排序

在这件事上有什么帮助吗


thnx

据我所知,Excel不存储每张工作表的创建日期和时间。然而,每一张新工作表都会添加到工作簿的每一页末尾。
所以,你可以根据这个假设来颠倒顺序

这里有一个VBA宏来执行此操作,您只需将其调整为interop或C#:


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

因此,如果您在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);
        }
   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);
                }
            }
        }
    }
public void SortWs()
{
_sort的列表=新列表();
foreach(工作表工作表中的工作表ws)
{
对于_sort.Add(ws);
}
对于_sort.sort(代表(工作表wst1,工作表wst2)
{
返回wst1.Name.CompareTo(wst2.Name);//按工作表名称排序
});
工作表ws1、ws2;
for(int i=0;i对于(int j=1;j我想知道以相反的顺序创建工作表是否是一个好主意?如果选择了第一张工作表,sheet.Add的默认值是Before。@Remou:这也是一个好主意。我从OP的问题中了解到,他在创建工作表时不能干扰工作簿,但只能在创建工作表之后进行。因此我的解决方案。@JMax thts true..我想在创建所有图纸后遍历..让我看看它是否有效。。。。。
   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);
                }
            }
        }
    }