Excel周列以升序排序

时间:2017-09-14 07:38:59

标签: excel ms-office excel-2013 aspose-cells

我有一个周范围数据如下,其中包含以 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

3 个答案:

答案 0 :(得分:1)

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

将此与正确的日期列进行比较,其中日期存储为数字。然后Excel将根据日历从第一个到最后一个排序,反之亦然。

您需要做的是使用一些字符串操作(dateleftmid的组合)来区分开始和结束日期。然后对结果日期进行排序。

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

Date功能允许您创建日期,提供年,月和日。您可以使用MidLeft来提供这三个。

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

Left将为您提供字符串最左侧的字符。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

enter image description here

<强> 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担任开发人员传播者