【发布时间】:2013-11-01 00:08:51
【问题描述】:
我在 excel 中有一个范围,需要按两列排序。数据的范围总是从 A 列到 AA 列,我需要先按 A 列(这是一个日期列,所以从最旧到最新)对其进行排序,然后按 F 列(数字列,从最小到最高)进行排序。行数会有所不同。
这是我到目前为止所得到的,请记住我对 c# 比较陌生。
Excel.Worksheet JobDataSheet = new Excel.Worksheet();
foreach (Excel.Worksheet tmpSheet in Globals.ThisAddIn.Application.ActiveWorkbook.Sheets)
{
if (tmpSheet.Name == "Job Labour" || tmpSheet.Name == "Job Materials" || tmpSheet.Name == "Job Cost Report")
{
tmpSheet.Delete();
}
if (tmpSheet.Name == "Job Cost")
JobDataSheet = tmpSheet;
}
int MyCount = JobDataSheet.UsedRange.Rows.Count;
//Sort Collection by Date & Ref Line
Excel.Range tempRange = JobDataSheet.get_Range("A2:A" + MyCount);
Excel.Range tempRange2 = JobDataSheet.get_Range("F2:F" + MyCount);
JobDataSheet.Sort.SortFields.Clear();
JobDataSheet.Sort.SortFields.Add(tempRange // First Key
,Excel.XlSortOn.xlSortOnValues
,Excel.XlSortOrder.xlAscending
,Type.Missing
,Excel.XlSortDataOption.xlSortNormal);
JobDataSheet.Sort.SortFields.Add(tempRange2 // Second Key
, Excel.XlSortOn.xlSortOnValues
, Excel.XlSortOrder.xlAscending
, Type.Missing
, Excel.XlSortDataOption.xlSortNormal);
JobDataSheet.Sort.SetRange(JobDataSheet.get_Range("A1:AA" + MyCount));
JobDataSheet.Sort.Header = Excel.XlYesNoGuess.xlYes;
JobDataSheet.Sort.MatchCase = false;
JobDataSheet.Sort.Orientation = Excel.XlSortOrientation.xlSortRows;
JobDataSheet.Sort.SortMethod = Excel.XlSortMethod.xlPinYin;
JobDataSheet.Sort.Apply();
在 JobDataSheet.Sort.Apply(); 行 excel 抛出 "The sort reference is not valid. Make sure that it's within the data you want to sort, and the first Sort By box isn't in the same or blank."
【问题讨论】:
-
这不是您的实际代码吗?基于此,您似乎正在对空白工作表进行排序?
-
我忘记复制我声明工作表的部分,我编辑了我的帖子以包含此部分。我声明了一个 tmpSheet 变量,并在循环中使用它来检查三个特定的工作表,然后我如果存在则删除。接下来,我检查 tmpSheet = "Job Cost" 是否是代码需要执行的工作表,然后我将 JobDataSheet 变量设置为我的 tmpSheet。