我在Excel中有一个范围,我需要按两列进行排序。数据总是从A列到AA列,我需要先按列A(这是一个日期列,最早到最新),然后按列F(数字列,从最小到最高)对它进行排序。行数会有所不同。尝试使用c对两列进行排序excel范围
这是我到目前为止,请记住我相对较新的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."
这是不是你的实际代码?基于此,它看起来像你正在排序一个空白表? – user2140261
我忘了复制宣布我的工作表的部分,我编辑了我的帖子以包含此部分。我声明了一个tmpSheet变量,并在循环中使用它来检查三个特定工作表,然后删除它们(如果存在)。接下来,我检查tmpSheet =“工作成本”,这是工作表需要执行的代码,然后让我的JobDataSheet变量=我的tmpSheet。 – Cornelius