Excel周列升序排列

Excel Week Column Sorting in Ascending Order

我有一个如下所示的周范围数据,其中有一周的开始日期和结束日期,格式为 mm/dd/yy -mm/dd/yy,我是正在尝试对列进行排序,但未按要求排序,请帮助我。

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

Excel 将您的周范围数据读取为字符串(文本)。这意味着排序时,它会读取第一个字符,然后根据它进行排序。这就是为什么您的数据从 1 到 10 排序(自您的日期以来的相应月份 mm/dd/yy

将此与适当的日期列进行比较,其中日期存储为数字。那么Excel会按照日历从头到尾排序,反之亦然。

您需要做的是使用一些字符串操作将开始日期和结束日期分开(想到 dateleft 以及 mid 的组合)。然后对结果日期进行排序。

编辑 使用 =DATE(2000+MID(A2,7,2),LEFT(A2,2),MID(A2,4,2)) 创建一个包含每周开始日期的新列(假设您的数据 header 在 A1 中并且第一个间隔从单元格 A2 开始)。

Date 函数允许您创建日期,提供年月日。您使用 MidLeft.

提供这三个

Mid 根据给定的起始位置和要求的长度在字符串中查找特定字符。

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

请在周列旁边使用此公式。假设您的日期值从 A2 开始,在 B2 中输入此公式 =DATEVALUE(LEFT(A2,8)) 并按列 B 从小到大排序。您的开始日期现在应该正确排序了。

请使用以下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 担任开发人员布道师