You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
8.8 KiB
292 lines
8.8 KiB
1 year ago
|
using System;
|
||
|
using System.ComponentModel;
|
||
|
using System.Windows.Forms;
|
||
|
|
||
|
namespace CK.SCP.Utils
|
||
|
{
|
||
|
public class ProcessOperator
|
||
|
{
|
||
|
private readonly BackgroundWorker _backgroundWorker;//后台线程
|
||
|
private readonly FormProcess _processForm;//进度条窗体
|
||
|
private readonly BackgroundWorkerEventArgs _eventArgs;//异常参数
|
||
|
public ProcessOperator()
|
||
|
{
|
||
|
_backgroundWorker = new BackgroundWorker();
|
||
|
_processForm = new FormProcess();
|
||
|
_eventArgs = new BackgroundWorkerEventArgs();
|
||
|
_backgroundWorker.DoWork += _backgroundWorker_DoWork;
|
||
|
_backgroundWorker.RunWorkerCompleted += _backgroundWorker_RunWorkerCompleted;
|
||
|
}
|
||
|
|
||
|
//操作进行完毕后关闭进度条窗体
|
||
|
private void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||
|
{
|
||
|
if (_processForm.Visible == true)
|
||
|
{
|
||
|
_processForm.Close();
|
||
|
}
|
||
|
if (this.BackgroundWorkerCompleted != null)
|
||
|
{
|
||
|
this.BackgroundWorkerCompleted(null, _eventArgs);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//后台执行的操作
|
||
|
private void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
|
||
|
{
|
||
|
if (BackgroundWork == null) return;
|
||
|
try
|
||
|
{
|
||
|
BackgroundWork();
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
_eventArgs.BackGroundException = ex;
|
||
|
MessageBox.Show(ex.ToString());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#region 公共方法、属性、事件
|
||
|
|
||
|
/// <summary>
|
||
|
/// 后台执行的操作
|
||
|
/// </summary>
|
||
|
public Action BackgroundWork { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// 设置进度条显示的提示信息
|
||
|
/// </summary>
|
||
|
public string MessageInfo
|
||
|
{
|
||
|
set { _processForm.MessageInfo = value; }
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 后台任务执行完毕后事件
|
||
|
/// </summary>
|
||
|
public event EventHandler<BackgroundWorkerEventArgs> BackgroundWorkerCompleted;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 开始执行
|
||
|
/// </summary>
|
||
|
public void Start()
|
||
|
{
|
||
|
_backgroundWorker.RunWorkerAsync();
|
||
|
_processForm.ShowDialog();
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
private void CreateWorksheet(Application excel, Worksheet sheet, DataTable dt, string fileName)
|
||
|
{
|
||
|
Range r = null;
|
||
|
int rIdx = RStartIndex;
|
||
|
int cIdx = CStartIndex;
|
||
|
if (!string.IsNullOrEmpty(dt.TableName))
|
||
|
{
|
||
|
sheet.Name = dt.TableName;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//取得标题
|
||
|
//
|
||
|
foreach (DataColumn dc in dt.Columns)
|
||
|
{
|
||
|
cIdx++;
|
||
|
excel.Cells[rIdx, cIdx] = dc.ColumnName;
|
||
|
//设置标题格式为居中对齐
|
||
|
r = sheet.Range[excel.Cells[rIdx, cIdx], excel.Cells[rIdx, cIdx]];
|
||
|
r.HorizontalAlignment = XlVAlign.xlVAlignCenter;
|
||
|
r.Interior.ColorIndex = 37;
|
||
|
}
|
||
|
|
||
|
//因为第一行已经写了表头,所以所有数据都应该从a2开始
|
||
|
r = sheet.Range[excel.Cells[rIdx, cIdx], excel.Cells[rIdx, cIdx]];
|
||
|
|
||
|
WriteData(dt, sheet);
|
||
|
|
||
|
int rSumIdx = dt.Rows.Count + 1;
|
||
|
int cSumIdx = CStartIndex + 1;
|
||
|
|
||
|
|
||
|
//
|
||
|
//设置报表表格为最适应宽度
|
||
|
//
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Select();
|
||
|
r.Columns.AutoFit();
|
||
|
|
||
|
|
||
|
//
|
||
|
//绘制边框
|
||
|
//
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Borders.LineStyle = 1;
|
||
|
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[rSumIdx, cSumIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick; //设置左边线加粗
|
||
|
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[RStartIndex, cIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick; //设置上边线加粗
|
||
|
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick; //设置右边线加粗
|
||
|
|
||
|
r = sheet.Range[excel.Cells[rSumIdx, cSumIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick; //设置下边线加粗
|
||
|
|
||
|
|
||
|
r = sheet.Range[excel.Cells[0, 0], null];
|
||
|
|
||
|
//
|
||
|
//显示效果
|
||
|
//
|
||
|
excel.Visible = false;
|
||
|
excel.DisplayAlerts = false;
|
||
|
excel.AlertBeforeOverwriting = false;
|
||
|
}
|
||
|
|
||
|
private void AddWorksheet(Application excel, Worksheet sheet, DataTable dt, string fileName)
|
||
|
{
|
||
|
Range r = null;
|
||
|
int rIdx = RStartIndex;
|
||
|
int cIdx = CStartIndex;
|
||
|
if (!string.IsNullOrEmpty(dt.TableName))
|
||
|
{
|
||
|
sheet.Name = dt.TableName;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//取得标题
|
||
|
//
|
||
|
foreach (DataColumn dc in dt.Columns)
|
||
|
{
|
||
|
cIdx++;
|
||
|
excel.Cells[rIdx, cIdx] = dc.ColumnName;
|
||
|
//设置标题格式为居中对齐
|
||
|
r = sheet.Range[excel.Cells[rIdx, cIdx], excel.Cells[rIdx, cIdx]];
|
||
|
r.HorizontalAlignment = XlVAlign.xlVAlignCenter;
|
||
|
r.Interior.ColorIndex = 37;
|
||
|
}
|
||
|
|
||
|
//因为第一行已经写了表头,所以所有数据都应该从a2开始
|
||
|
r = sheet.Range[excel.Cells[rIdx, cIdx], excel.Cells[rIdx, cIdx]];
|
||
|
WriteData(dt, sheet);
|
||
|
|
||
|
|
||
|
int rSumIdx = dt.Rows.Count + 1;
|
||
|
int cSumIdx = CStartIndex + 1;
|
||
|
//
|
||
|
//设置报表表格为最适应宽度
|
||
|
//
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Select();
|
||
|
r.Columns.AutoFit();
|
||
|
|
||
|
//
|
||
|
//绘制边框
|
||
|
//
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Borders.LineStyle = 1;
|
||
|
|
||
|
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[rSumIdx, cSumIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick; //设置左边线加粗
|
||
|
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cSumIdx], excel.Cells[RStartIndex, cIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick; //设置上边线加粗
|
||
|
|
||
|
r = sheet.Range[excel.Cells[RStartIndex, cIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick; //设置右边线加粗
|
||
|
|
||
|
r = sheet.Range[excel.Cells[rSumIdx, cSumIdx], excel.Cells[rSumIdx, cIdx]];
|
||
|
r.Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick; //设置下边线加粗
|
||
|
//
|
||
|
//显示效果
|
||
|
//
|
||
|
r = sheet.Range[excel.Cells[0, 0], null];
|
||
|
excel.Visible = false;
|
||
|
excel.DisplayAlerts = false;
|
||
|
excel.AlertBeforeOverwriting = false;
|
||
|
}
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
//1、全表自动列宽
|
||
|
|
||
|
// mysheet.Cells.Select();
|
||
|
|
||
|
// mysheet.Cells.Columns.AutoFit();
|
||
|
|
||
|
// 2、合并
|
||
|
|
||
|
// excelRangeParm.Merge(Missing.Value);
|
||
|
|
||
|
// 3、粗体设置
|
||
|
|
||
|
// excelRangeParm.Font.Bold = true;
|
||
|
|
||
|
// 4、字体大小设置
|
||
|
|
||
|
// excelRangeParm.Font.Size = 12;
|
||
|
|
||
|
// 5、水平对齐设置
|
||
|
|
||
|
// excelRangeParm.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
|
||
|
|
||
|
// 6、垂直对齐设置
|
||
|
|
||
|
// excelRangeParm.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
|
||
|
|
||
|
// 7、公式设置
|
||
|
|
||
|
// excelRangeParm.FormulaR1C1 = 公式;
|
||
|
|
||
|
// 8、列宽设置
|
||
|
|
||
|
// excelRange.ColumnWidth = 宽度;
|
||
|
|
||
|
// 9、行高
|
||
|
|
||
|
// excelRange.RowHeight = 行高;
|
||
|
|
||
|
// 10、设置列格式
|
||
|
|
||
|
// Excel.Range myrange=mysheet.get_Range(mysheet.Cells[1,1],mysheet.Cells[5,1]);
|
||
|
|
||
|
// 11、文本格式
|
||
|
|
||
|
// myrange.NumberFormatLocal="@";
|
||
|
|
||
|
// 12、通用格式
|
||
|
|
||
|
// style.NumberFormatLocal = "[DBNum2][$-804]G/通用格式";
|
||
|
|
||
|
// 或
|
||
|
|
||
|
// range.NumberFormatLocal = "G/通用格式";
|
||
|
|
||
|
// xlsheet.Cells[1,1]="''+txtKey.Text;
|
||
|
|
||
|
// 13、添加行
|
||
|
|
||
|
// ((Excel.Range)mysheet.Cells[15,3]).EntireRow.Insert(0);
|
||
|
|
||
|
// 14、设置第10行为红色
|
||
|
|
||
|
// mysheet.get_Range((Excel.Range)mysheet.Cells[10,1],(Excel.Range)mysheet.Cells[10,200]).Select();
|
||
|
|
||
|
// mysheet.get_Range((Excel.Range)mysheet.Cells[10,1],(Excel.Range)mysheet.Cells[10,200]).Interior.ColorIndex=3;
|
||
|
|
||
|
//15、单元格自动换行
|
||
|
|
||
|
//myrange.WrapText = true;
|
||
|
|
||
|
//16、单元格行高自动调整
|
||
|
|
||
|
//myrange.EntireRow.AutoFit();
|