我有一个使用 C#-4.0 和 Excel.Interop 从 .dbf 转换的 Excel 97-2003 .xls 电子表格。数据根据 D 列按日期排序。
http://www.tiikoni.com/tis/view/?id=af4cf69
现在我需要按 G 列对所选范围(如图所示)进行排序,以便空白单元格位于所选范围的底部。
该图像正确显示它,但这只是因为从输入源检索到的数据以正确的顺序输入。如果数据没有按正确的顺序输入,那么空白单元格可能不会从一开始就位于 G 列的底部。
这就是我所拥有的,对每个 D 日期范围(一天)进行排序。
Range incasariSortRange;
Range sRange;
int startDateRowIndex = 6; // index of row where a D date starts
int endDateRowIndex = 6; // index of row where the same D date ends
public void selectGroupRange()
{
for (int r = startDateRowIndex; r < rowIndex; r++)
{
if (worksheet.Cells[endDateRowIndex, 4].Value == worksheet.Cells[r, 4].Value)
{
endDateRowIndex = r;
}
else
{
incasariSortRange = worksheet.get_Range("B" + startDateRowIndex, "H" + endDateRowIndex);
sRange = incasariSortRange.get_Range("G" + startDateRowIndex, "G" + endDateRowIndex);
// Sort the first 'D' date range's row by wether the cells in column 'G'
//of that range have any values (to be the first ones) or not (to be the last ones).
incasariSortRange.Sort(sRange, XlSortOrder.xlAscending,
Type.Missing, Type.Missing, XlSortOrder.xlAscending,
Type.Missing, XlSortOrder.xlAscending, XlYesNoGuess.xlNo, Type.Missing,
Type.Missing, XlSortOrientation.xlSortColumns, XlSortMethod.xlPinYin, XlSortDataOption.xlSortNormal,
XlSortDataOption.xlSortNormal, XlSortDataOption.xlSortNormal);
// Set the start and end (date) row indexes to the same so the incasariSortRange will be one row only.
startDateRowIndex = r; // set the start to a new date
endDateRowIndex = r; // set the end to the same new date
}
}
}
'rowIndex' 是电子表格中最后一行数据之后的行的索引号。
但如此处所示,它对行进行排序,以便 G 列中的空白单元格到达所选范围的顶部。
http://www.tiikoni.com/tis/view/?id=ea48320
我的第二个问题是,在进行此排序后,如何从所选范围中仅选择 G 列中的单元格不为空白的行?- 这样我就可以再次对它们进行排序。
谢谢你。