我的应用程序功能如下:
.xls
文档从网络位置下载到临时文件中。.xls
在后台与此Microsoft.Office.Interop.Excel
文档进行交互,以更新用户的展望日历(同时使用Interop
)。解析.xls
的相关方法如下:
private static List<AppointmentDetails> ParseXls(string localSchedulePath, string initials)
{
List<AppointmentDetails> list = new List<AppointmentDetails>();
List<string> alreadyCounted = new List<string>();
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(localSchedulePath);
Excel.Worksheet worksheet = workbook.Sheets["On Call"];
Excel.Range schedule = worksheet.Range["A1", "P369"];
foreach (Excel.Range row in schedule.Rows)
{
foreach (Excel.Range cell in row.Cells)
{
if (cell.Value == null || alreadyCounted.Contains(IndexToExcel(cell.Row, cell.Column))) continue;
if (cell.Value.ToString().Contains(initials))
{
List<int> rows = new List<int>();
int rowNum = cell.Row;
int colNum = cell.Column;
rows.Add(rowNum);
alreadyCounted.Add(IndexToExcel(rowNum, colNum));
while (schedule.Range[IndexToExcel(++rowNum, colNum)].Value != null &&
schedule.Range[IndexToExcel(rowNum, colNum)].Value.ToString().Contains(initials))
{
alreadyCounted.Add(IndexToExcel(rowNum, colNum));
rows.Add(rowNum);
}
string regionCode = worksheet.Range[IndexToExcel(1, colNum)].Value.ToString();
list.Add(new AppointmentDetails
{
StartDate = DateTime.Parse(worksheet.Range[IndexToExcel(rows[0], 2)].Value.ToString()),
EndDate = DateTime.Parse(worksheet.Range[IndexToExcel(rows[rows.Count - 1], 2)].Value.ToString()),
Region = regionCode
});
}
}
}
return list;
}
这非常好用,日历会更新,一切都按照预期运行。但是,出于某种原因,当然后从SharePoint站点手动打开.xls
以便用户可以自己查看它时,刚刚下载的临时窗口也会打开(每个窗口都在一个单独的Excel窗口中)。
这不是一部重要的戏剧,但我不明白为什么会这样,我宁愿摆脱一个小故障,如果可以的话。知道如何解决这个问题吗?
答案 0 :(得分:0)
答案很简单。感谢@ Ctznkane525指出这一点。 Interop资源在超出范围时不会自行清理。这需要手动完成。
在问题的函数底部添加了以下两行代码,以禁止警报,然后关闭应用程序。
$s1="32.56.86.90.23";
$s2="11.23.32.90.10";
$s1_ar=explode(".",$s1);
$s2_ar=explode(".",$s2);
//assuming $s1_ar and $s2_ar both has unique values if not please make them unique
$result_array = array();
$hasMatch = 0;
for($i = 0; $i < count($s1_ar) && $i < count($s2_ar); $i++){
if(!isset($result_array[$s1_ar[$i]])){
$result_array[$s1_ar[$i]] = 1;
}else{
$result_array[$s1_ar[$i]]++;
}
if(!isset($result_array[$s2_ar[$i]])){
$result_array[$s2_ar[$i]] = 1;
}else{
$result_array[$s2_ar[$i]]++;
}
}
foreach($result_array as $result){
if($result >=2) $hasMatch++;
}
if($hasMatch >= 2)
echo "YES";
else
echo "NO";