/// <summary>
/// 导出Excel
/// </summary>
/// <param name="table"></param>
public void WriteToExcel(DataGridView dgv)
{
try
{
SaveFileDialog dialog = new SaveFileDialog
{
Title = "保存",
Filter = "Excel(*.xls)|*.xls|所有文件(*.*)|*.*",
RestoreDirectory = true
};
if (dialog.ShowDialog() == DialogResult.OK)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(dialog.FileName, true, System.Text.Encoding.Default); //写入流
object[] values = new object[dgv.Columns.Count];
for (int i = 0; i < dgv.Columns.Count; ++i)
{
sw.Write(dgv.Columns[i].HeaderText.ToString());
sw.Write('\t');
}
sw.Write("\r\n");
for (int i = 0; i < dgv.Rows.Count; i++)
{
for (int j = 0; j < values.Length; ++j)
{
if (dgv.Rows[i].Cells[j].Value != null)
{
sw.Write(dgv.Rows[i].Cells[j].Value.ToString());
}
sw.Write('\t');
}
sw.Write("\r\n");
}
sw.Flush();
sw.Close();
MessageBox.Show("成功导出[" + dgv.Rows.Count.ToString() + "]行到Execl!");
}
}
catch
{
MessageBox.Show("导出Execl失败!");
}
}
#region 導出Excel
public void outPutExcel(DataGridView dgv)
{
SaveFileDialog dialog = new SaveFileDialog
{
Title = "保存",
Filter = "Excel(*.xls)|*.xls|所有文件(*.*)|*.*",
RestoreDirectory = true
};
if (dialog.ShowDialog() == DialogResult.OK)
{
if (dgv.Rows.Count == 0) return;
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
return;
}
//創建Excel對象
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
//Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
if (worksheet == null)
{
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing);
}
//else
//{
// //worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, worksheet, 1, Type.Missing);
//}
Microsoft.Office.Interop.Excel.Range range = null;
long totalCount = dgv.Rows.Count;
long rowRead = 0;
float percent = 0;
worksheet.Name = "明細資料一";//第一个sheet在Excel中显示的名称
////写入标题
for (int i = 0; i < dgv.Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
range.Interior.ColorIndex = 15;//背景颜色
range.Font.Bold = true;//粗体
range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//居中
//加边框
range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
//range.ColumnWidth = dgv.Columns[i].Width;//设置列宽
range.EntireColumn.AutoFit();//自动调整列宽
//r1.EntireRow.AutoFit();//自动调整行高
}
//写入内容
for (int r = 0; r < dgv.Rows.Count; r++)
{
for (int i = 0; i < dgv.Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = dgv.Rows[r].Cells[i].Value;
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r + 2, i + 1];
range.Font.Size = 9;//字体大小
//加边框
range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
range.EntireColumn.AutoFit();//自动调整列宽
}
rowRead++;
percent = ((float)(100 * rowRead)) / totalCount;
}
range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
if (dgv.Columns.Count > 1)
{
range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
}
//下面是将Excel存储在服务器上指定的路径与存储的名称
try
{
string tPath = dialog.FileName;
workbook.SaveCopyAs(tPath);
if ( MessageBox.Show("导出Excel成功")== DialogResult.OK)
{
KillProcess("EXCEL");
}
}
catch (Exception ex)
{
string strMsgErr = "生成Excel附件過程中出現異常,詳細信息如:" + ex.ToString();
}
}
}
/// <summary>
/// 杀死进程
/// </summary>
/// <param name="processName"></param>
private void KillProcess(string processName)
{
System.Diagnostics.Process myproc = new System.Diagnostics.Process();
//得到所有打开的进程
try
{
foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcessesByName(processName))
{
//if (!thisproc.CloseMainWindow())
if (thisproc.ProcessName == "EXCEL")
{
thisproc.Kill();
break;
}
}
}
catch (Exception Exc)
{
throw new Exception("", Exc);
}
}
#endregion