代码如下:
//调用
dgvRecord.DataSource = dt;
DAL.DataToExcel exp =new DAL.DataToExcel();
int flag = exp.ExistsRegedit();
if (flag == 0)
{
MessageBox.Show("请先安装office或者wps,再进行导出 !");
}
else
{
if (dt != null && dt.Rows.Count > 0)
{
if (flag == 1 || flag == 2 || flag == 3)
{
ExportExcel(dt, flag);
}
else if (flag == 4 || flag == 5 || flag == 6 || flag == 7)
{
ExportExcel(dt, flag);
}
}
else
{
MessageBox.Show("没有要导出的数据!");
}
}
//方法
#region 查询注册表,判断本机是否安装office2003,2007和wps
public int ExistsRegedit()
{
int ifused = 0;
RegistryKey rk = Registry.LocalMachine;
RegistryKey akey = rk.OpenSubKey(@"SOFTWAREMicrosoftOffice11.0ExcelInstallRoot");//查询2003
RegistryKey akey07 = rk.OpenSubKey(@"SOFTWAREMicrosoftOffice12.0ExcelInstallRoot");//查询2007
RegistryKey akeytwo = rk.OpenSubKey(@"SOFTWAREKingsoftOffice6.0common");//查询wps
//检查本机是否安装Office2003
if (akey != null)
{
string file03 = akey.GetValue("Path").ToString();
if (File.Exists(file03 + "Excel.exe"))
{
ifused += 1;
}
}
//检查本机是否安装Office2007
if (akey07 != null)
{
string file07 = akey07.GetValue("Path").ToString();
if (File.Exists(file07 + "Excel.exe"))
{
ifused += 2;
}
}
//检查本机是否安装wps
if (akeytwo != null)
{
string filewps = akeytwo.GetValue("InstallRoot").ToString();
if (File.Exists(filewps + @"office6et.exe"))
{
ifused += 4;
}
}
return ifused;
}
#endregion
#region 导出excel
public void ExportExcel(System.Data.DataTable dt, int flag)
{
//-***获取excel对象***
string saveFileName = "";
bool fileSaved = false;
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
if (flag == 2)
{
saveDialog.Filter = "Excel文件.xlsx|*.xlsx";
}
else if (flag == 4 || flag == 5 || flag == 6 || flag == 7)
{
saveDialog.Filter = "wps文件.et|*.et";
}
else
{
saveDialog.Filter = "Excel文件.xls|*.xls";
}
saveDialog.FileName = "导出普查信息表 " + DateTime.Today.ToString("yyyy-MM-dd");
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = xlApp.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range;
// 列索引,行索引,总列数,总行数
int colIndex = 0;
int RowIndex = 0;
int colCount = dgvRecord.ColumnCount;
int RowCount = dt.Rows.Count;
// ***获取数据***
// 创建缓存数据
object[,] objData = new object[RowCount + 1, colCount];
// 获取具体数据
for (RowIndex = 0; RowIndex < RowCount; RowIndex++)
{
for (colIndex = 0; colIndex < colCount; colIndex++)
{
objData[RowIndex, colIndex] = dt.Rows[RowIndex][colIndex];
}
}
//*** 把数值型转成字符型l***
range = worksheet.get_Range(xlApp.Cells[3, 2], xlApp.Cells[RowCount + 2, 2]);
range.NumberFormatLocal = "@";
range = worksheet.get_Range(xlApp.Cells[3, 3], xlApp.Cells[RowCount + 2, 3]);
range.NumberFormatLocal = "@";
range = worksheet.get_Range(xlApp.Cells[3, 7], xlApp.Cells[RowCount + 2, 7]);
range.NumberFormatLocal = "@";
range = worksheet.get_Range(xlApp.Cells[3, 8], xlApp.Cells[RowCount + 2, 8]);
range.NumberFormatLocal = "@";
//***** 写入Excel*****
range = worksheet.get_Range(xlApp.Cells[3, 1], xlApp.Cells[RowCount + 2, colCount - 2]);
range.Value2 = objData;
System.Windows.Forms.Application.DoEvents();
//特殊数字格式
range = worksheet.get_Range(xlApp.Cells[3, colCount - 5], xlApp.Cells[RowCount + 2, colCount - 5]);
range.NumberFormat = "yyyy-MM-dd hh:mm:ss";
//*** 设置报表表格样式***
//设置为横向打印
//xlApp.ActiveSheet.PageSetup.Orientation=2;
//设置报表表格为最适应宽度
worksheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colCount]).Select();
worksheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colCount]).Columns.AutoFit();
//绘制边框
worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[RowCount + 2, colCount]).Borders.LineStyle = 1;
//设置左边线加粗
worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[RowCount, 1]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
//设置上边线加粗
worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, colCount]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
//设置右边线加粗
worksheet.get_Range(xlApp.Cells[1, colCount], xlApp.Cells[RowCount, colCount]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
//设置下边线加粗
worksheet.get_Range(xlApp.Cells[RowCount + 2, 1], xlApp.Cells[RowCount + 2, colCount]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
range = worksheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colCount]);
//range.Interior.ColorIndex = 1;//背景色
range.Font.Bold = true;
range.RowHeight = 20;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 1]).ColumnWidth = 25;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 2]).ColumnWidth = 13;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 3]).ColumnWidth = 15;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 4]).ColumnWidth = 30;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 5]).ColumnWidth = 22;
//合并单元格
Microsoft.Office.Interop.Excel.Range excelRange = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 29]);
excelRange.Merge(excelRange.MergeCells);
//获取列标题
for (int i = 0; i < colCount; i++)
{
worksheet.Cells[2, i + 1] = dgvRecord.Columns[i].HeaderText;
}
//文档标题
range = worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, 1]);
range.Font.Bold = true;
range.Font.Size = 20;
worksheet.Cells[1, 1] = "普查信息表";
//*****保存*****
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
fileSaved = true;
}
catch (Exception ex)
{
fileSaved = false;
MessageBox.Show("导出文件时出错,文件可能正被打开!n" + ex.Message);
}
}
else
{
fileSaved = false;
}
xlApp.Quit();
GC.Collect();//强行销毁
if (fileSaved && File.Exists(saveFileName))
{
System.Diagnostics.Process.Start(saveFileName);
}
}
#endregion