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会按照日历从头到尾排序,反之亦然。
您需要做的是使用一些字符串操作将开始日期和结束日期分开(想到 date
和 left
以及 mid
的组合)。然后对结果日期进行排序。
编辑
使用 =DATE(2000+MID(A2,7,2),LEFT(A2,2),MID(A2,4,2))
创建一个包含每周开始日期的新列(假设您的数据 header 在 A1 中并且第一个间隔从单元格 A2 开始)。
Date
函数允许您创建日期,提供年月日。您使用 Mid
和 Left
.
提供这三个
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 担任开发人员布道师
我有一个如下所示的周范围数据,其中有一周的开始日期和结束日期,格式为 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会按照日历从头到尾排序,反之亦然。
您需要做的是使用一些字符串操作将开始日期和结束日期分开(想到 date
和 left
以及 mid
的组合)。然后对结果日期进行排序。
编辑
使用 =DATE(2000+MID(A2,7,2),LEFT(A2,2),MID(A2,4,2))
创建一个包含每周开始日期的新列(假设您的数据 header 在 A1 中并且第一个间隔从单元格 A2 开始)。
Date
函数允许您创建日期,提供年月日。您使用 Mid
和 Left
.
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 担任开发人员布道师