Excel Week列按升序sorting

我有一个星期范围数据作为下面,其中有星期和结束date的开始date,以mm / dd / yy -mm / dd / yy格式,我尝试对列进行sorting,但没有按要求sorting,请帮我。

Week 01/02/17-01/08/17 01/02/17-01/08/17 01/02/17-01/08/17 02/01/16-02/07/16 02/01/16-02/07/16 02/13/17-02/19/17 02/13/17-02/19/17 03/07/16-03/13/16 03/07/16-03/13/16 03/20/17-03/26/17 03/20/17-03/26/17 05/02/16-05/08/16 05/02/16-05/08/16 08/08/16-08/14/16 08/08/16-08/14/16 09/05/16-09/11/16 09/05/16-09/11/16 10/31/16-11/06/16 10/31/16-11/06/16 

请在本周栏旁边使用此公式。 假设您的date值以A2开始,请在A2中input此公式=DATEVALUE(LEFT(A2,8)) ,并按列B最小值sorting为最大值。 你的开始date应该现在正确sorting。

Excel将您的星期范围数据作为string(文本)读取。 这意味着sorting时,它会读取第一个字符,然后根据它进行sorting。 这就是为什么你的数据是从1到10sorting(相应的月份,因为你的date是年/月/日 )

将其与date存储为数字的适当date列进行比较。 然后,Excel将按照从第一个到最后一个的日历进行sorting,反之亦然。

你需要做的是使用一些string操作( dateleftmid弹簧的组合)来分隔开始和结束date。 然后对结果date进行sorting。

编辑使用=DATE(2000+MID(A2,7,2),LEFT(A2,2),MID(A2,4,2))创build一个每周开始date的新列(假设您的数据标题为在A1中,第一个时间间隔从A2开始)。

Datefunction允许您创build一个date,提供年,月和日。 你使用MidLeft来提供这三个。

Mid根据给定的起始位置和所需的长度查找stringMid特定字符。

Left会给你一个string的最左边的字符。

请使用下面的Aspose.Cells示例代码 ,它应该可以解决您的问题。 您可以根据需要进一步修改代码。

请查看示例代码输出的截图以供参考。 屏幕截图还突出了代码中使用的公式。

在这里输入图像说明

C#

 Workbook wb = new Workbook("AfterSorting.ods"); Cells cells = wb.Worksheets[0].Cells; int maxRow = 19; for (int i = 1; i <= maxRow; i++) { cells[i, 1].Formula = "=DATEVALUE(LEFT(A" + (i + 1) + ",8))"; } wb.CalculateFormula(); DataSorter sorter = wb.DataSorter; sorter.Key1 = 1; sorter.Order1 = SortOrder.Descending; sorter.Sort(cells, 1, 0, maxRow, 1); wb.Save("ooo.xlsx"); 

注意:我在Aspose作为Developer Evangelist工作