http://www.cnblogs.com/rr163/p/3979409.html
还真没做过winform的导出导入,今天上网百度了一下。结果---
所以还是我自己写个吧。之前做过web的,半搬半做就OK。
1添加引用:Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载。关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的说。这里你暂时也可不理会它。)
Aspose.Cells.dll 和中文说明 下载地址: http://item.taobao.com/auction/item_detail-0db2-f9b1d99e6cb27d78ae9e6373a1529633.htm
public void DtExportExcel(string fileName, System.Data.DataTable myDGV, List<string> listarray)
{string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消
Excel.Application xlApp = new Excel.Application();
if (xlApp == null)
{
MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
return;
}
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//生成Excel中列头名称
for (int i = 0; i < myDGV.Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = myDGV.Columns[i].ColumnName.ToString(); ;
}
//把DataTable当前页的数据保存在Excel中
if (myDGV.Rows.Count > 0)
{
for (int i = 0; i < myDGV.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完
{
for (int j = 0; j < myDGV.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完
{
string str = myDGV.Rows[i][j].ToString();
worksheet.Cells[i + 2, j + 1] = str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制
}
}
}
worksheet.Cells[myDGV.Rows.Count + 2, 1] = "合计:";
worksheet.Cells[myDGV.Rows.Count + 2, myDGV.Columns.IndexOf(listarray[0].ToString()) + 1] = listarray[1].ToString();
worksheet.Cells[myDGV.Rows.Count + 2, myDGV.Columns.IndexOf(listarray[2].ToString()) + 1] = listarray[3].ToString();
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
xlApp.Quit();
GC.Collect();//强行销毁
MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
public void ExportExcel(string fileName, DataGridView myDGV, List<string> listarray)
{
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消
Excel.Application xlApp = new Excel.Application();
if (xlApp == null)
{
MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
return;
}
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//生成Excel中列头名称
for (int i = 0; i < myDGV.Columns.Count; i++)
{
if (myDGV.Columns[i].Visible == true)
{
worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
}
}
//把DataGridView当前页的数据保存在Excel中
for (int i = 0; i < myDGV.Rows.Count - 1; i++)
{
System.Windows.Forms.Application.DoEvents();
for (int j = 0; j < myDGV.Columns.Count; j++)
{
if (myDGV.Columns[j].Visible == true)
{
if (myDGV[j, i].ValueType == typeof(string))
{
worksheet.Cells[i + 2, j + 1] = "'" + myDGV[j, i].Value.ToString();
}
else
{
worksheet.Cells[i + 2, j + 1] = myDGV[j, i].Value.ToString();
}
}
}
}
worksheet.Cells[myDGV.RowCount + 1, 1] = "合计:";
worksheet.Cells[myDGV.RowCount + 1, myDGV.Columns[listarray[0].ToString()].Index+1] = listarray[1].ToString();
worksheet.Cells[myDGV.RowCount + 1, myDGV.Columns[listarray[2].ToString()].Index+1] = listarray[3].ToString();
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
xlApp.Quit();
GC.Collect();//强行销毁
MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}