Excel的导入导出以往都是使用Office提供的Excel Library(COM组件)实现的,此方法有三个缺点!
第一,运行环境必须装有指定版本的Excel
第二,运行环境中指定版本的Excel组件必须正常在操作系统中注册(使用COM组件是要注册的),也就是说,如果机器上虽然装了Excel,但是装的是阉割版、绿色版等奇怪的版本就不行了
第三,效率低下,常要注意GC,时常会因为操作不当造成开启一大堆Excel.exe进程占用过高系统资源(这些Excel.exe甚至不会随着你的应用程序的关闭而关闭)
所以我采取组件Aspose.Cells 5.3.0.1 此组件与Office套件脱离,也就是说,运行环境没有安装Excel的情况下也能正常运行。缺点就是这个是个收费组件 我现在使用的是破解版
导入Excel
/// <summary>
/// 导入excel数据并显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnImportExcel_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//清空表格控件
dgvExcel.Rows.Clear();
dgvExcel.Columns.Clear();
//工作簿
Workbook workbook = new Workbook(openFileDialog.FileName);
//表格
Cells cells = workbook.Worksheets[0].Cells;
//增加列数
for (int i = 0; i < cells.MaxDataColumn + 1; i++)
{
DataGridViewTextBoxColumn dataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
dgvExcel.Columns.Add(dataGridViewTextBoxColumn);
}
//增加行数
dgvExcel.Rows.Add(cells.MaxDataRow + 1);
for (int i = 0; i < cells.MaxDataRow + 1; i++)
{
for (int j = 0; j < cells.MaxDataColumn + 1; j++)
{
//将数据写入表格控件中
dgvExcel.Rows[i].Cells[j].Value = cells[i, j].StringValue.Trim();
string s = cells[i, j].StringValue.Trim();
//一行行的读取数据,插入数据库的代码也可以在这里写
}
}
}
}
catch (Exception EX)
{
MessageBox.Show(EX.Message);
}
}
导出Excel
/// <summary>
/// 导出数据到Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExportExcel_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "(表格文件).xls|xls";
saveFileDialog.DefaultExt = ".xls";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
Workbook workbook = new Workbook(); //工作簿
Worksheet worksheet = workbook.Worksheets[0]; //工作表
Style style = workbook.Styles[workbook.Styles.Add()]; //新增样式
//文本设置
style.HorizontalAlignment = TextAlignmentType.Center; //文字左右居中
style.VerticalAlignment = TextAlignmentType.Center; //文字上下居中
style.Font.Color = Color.Red; //字体颜色
style.Font.Name = "宋体"; //文字字体
style.Font.Size = 12; //文字大小
style.Font.IsBold = true; //粗体
style.BackgroundColor = Color.Yellow; //背景颜色
//边框样式
style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //左边框
style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //右边框
style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //上边框
style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //下边框
//style.IsTextWrapped = true; //单元格内容自动换行
//worksheet.AutoFitColumns(); //自适应列表宽度
for (int i = 0; i < dgvExcel.Rows.Count; i++)
{
for (int j = 0; j < dgvExcel.Columns.Count; j++)
{
worksheet.Cells[i, j].SetStyle(style); //增加样式
worksheet.Cells.SetRowHeight(i, 20); //设置列高
worksheet.Cells.SetColumnWidth(i, 15); //设置行宽
worksheet.Cells[i, j].PutValue(dgvExcel.Rows[i].Cells[j].Value);
}
}
//worksheet.Cells.Merge(1, 1, 1, 2);//合并单元格 1表示行号,2表示列号,3表示合并的行号,4表示合并的列数;
workbook.Save(saveFileDialog.FileName);
}
}
catch (Exception EX)
{
MessageBox.Show(EX.Message);
}
}
}
源码已上传