/// <summary> /// 程序异常发生 /// </summary> private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { AccountBookCommon.Log($"Message:{e.Exception.Message}\r\nSource:{e.Exception.Source}\r\nStackTrace:{e.Exception.StackTrace.TrimStart()}"); e.Handled = true; Message.ShowMessage("程序发生异常,请联系开发人员", null, shutdownFlg: true, errorFlg: true); bool result = Message.ShowConfirmMessage("是否重启软件?", null); if (result) { AccountBookCommon.ReLogin(); } }
/// <summary> /// 清空所有数据 /// </summary> private void btnResetData_Click(object sender, RoutedEventArgs e) { bool result = Message.ShowConfirmMessage($"确认清空所有数据么?", this); if (result) { // 备份数据文件 this.MakeBackup(); // 删除数据 service.DeleteAll(); Message.ShowMessage("已成功清空所有数据", this, shutdownFlg: true); // 回到登录界面 AccountBookCommon.ReLogin(); } }
/// <summary> /// 导出Excel /// </summary> public bool ExcportExcel(string path, string type, DateTime?dateFrom, DateTime?dateTo) { bool result = true; // 工作表 Worksheet worksheet; var list = this.dal.GetListDetial(dateFrom, dateTo); // 创建Excel主程序 Application excelApp = new Application(); excelApp.Visible = false; Workbooks workbooks = excelApp.Workbooks; // 创建工作簿 Workbook workbook = workbooks.Add(true); switch (type) { case CommConst.ByMonth: #region 月导出 var months = list.GroupBy(x => new { Year = x.AccountDate.Year, Month = x.AccountDate.Month }).Select(y => DateTime.Parse(y.Key.Year.ToString() + "/" + y.Key.Month.ToString() + "/01")).ToList(); for (int i = 0; i < months.Count(); i++) { if (i > 0) { // 原基础上添加Sheet workbook.Worksheets.Add(After: workbook.Worksheets[i]); } worksheet = workbook.Worksheets[i + 1] as Worksheet; worksheet.Name = $"{months[i].Year}年{months[i].Month}月"; this.SetExcelTitle(worksheet); var listByMonth = list.Where(x => x.AccountDate.Year == months[i].Year && x.AccountDate.Month == months[i].Month).ToList(); this.SetExcelContentByDay(worksheet, listByMonth); // 计算合计 空一行 int row = worksheet.UsedRange.Rows.Count + 2; this.SetExcelContentTotal(worksheet, listByMonth, $"{months[i].Year}年{months[i].Month}月合计", row); row++; this.SetSurplus(worksheet, row, CommConst.ByMonth, months[i]); // 格式设置 this.FormatExcel(worksheet, excelApp); } #endregion break; case CommConst.ByQuarter: #region 季度导出 list.ForEach(x => x.Quarter = this.GetQuarter(x.AccountDate)); var quarters = list.GroupBy(x => x.Quarter).Select(y => y.Key).ToList(); for (int i = 0; i < quarters.Count(); i++) { if (i > 0) { // 原基础上添加Sheet workbook.Worksheets.Add(After: workbook.Worksheets[i]); } worksheet = workbook.Worksheets[i + 1] as Worksheet; worksheet.Name = quarters[i]; this.SetExcelTitle(worksheet); var listByQuarter = list.Where(x => x.Quarter == quarters[i]).ToList(); this.SetExcelContentByDay(worksheet, listByQuarter, true); // 计算季度合计 空一行 int row = worksheet.UsedRange.Rows.Count + 2; this.SetExcelContentTotal(worksheet, listByQuarter, $"{quarters[i]}合计", row); row++; DateTime lastDate = listByQuarter.OrderBy(x => x.AccountDate).Last().AccountDate; this.SetSurplus(worksheet, row, CommConst.ByQuarter, lastDate); // 格式设置 this.FormatExcel(worksheet, excelApp); } #endregion break; case CommConst.ByYear: #region 年导出 var years = list.GroupBy(x => x.AccountDate.Year).Select(y => y.Key).ToList(); for (int i = 0; i < years.Count(); i++) { if (i > 0) { // 原基础上添加Sheet workbook.Worksheets.Add(After: workbook.Worksheets[i]); } worksheet = workbook.Worksheets[i + 1] as Worksheet; worksheet.Name = $"{years[i]}年"; this.SetExcelTitle(worksheet); var listByYear = list.Where(x => x.AccountDate.Year == years[i]).ToList(); this.SetExcelContentByDay(worksheet, listByYear, true); // 计算年合计 空一行 int row = worksheet.UsedRange.Rows.Count + 2; this.SetExcelContentTotal(worksheet, listByYear, $"{years[i]}年合计", row); row++; this.SetSurplus(worksheet, row, CommConst.ByYear, DateTime.Parse($"{years[i].ToString()}/01/01")); // 格式设置 this.FormatExcel(worksheet, excelApp); } #endregion break; } // 保存文件 try { workbook.SaveAs(path); } catch { result = false; } finally { // 关闭Excel线程 workbooks.Close(); excelApp.Quit(); IntPtr hwnd = new IntPtr(excelApp.Hwnd); int processId = 0; AccountBookCommon.GetWindowThreadProcessId(hwnd, out processId); System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(processId); process.Kill(); } return(result); }