예제 #1
0
        /// <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();
            }
        }
예제 #2
0
        /// <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);
        }