17,740
社区成员
发帖
与我相关
我的任务
分享
//设置自适应列宽
private static void SetColumnFit(Microsoft.Office.Interop.Excel.Worksheet sheet, int iColCount)
{
char column = 'B';
for (int i = 0; i < iColCount; i++)
{
Microsoft.Office.Interop.Excel.Range range = sheet.get_Range(String.Format("{0}1", column.ToString()),
String.Format("{0}1", column.ToString()));
if (range != null)
{
range.EntireColumn.AutoFit();
}
column++;
}
}
//设置适应页宽
private static void SetPagetoFitWide(Microsoft.Office.Interop.Excel.Worksheet ws)
{
ws.PageSetup.Zoom = false;
ws.PageSetup.FitToPagesWide = 1;
ws.PageSetup.FitToPagesTall = false;
}
//导出指定列,各列名以逗号分开
public static bool DataGridToExcel(DataGridView myDataGridView, string sColumns, string excelFileName, bool openFile)
{
if (myDataGridView.RowCount == 0 || string.IsNullOrEmpty(sColumns.Trim()))
{
return false;
}
string[] sColAry = sColumns.Split(',');
// 创建Excel对象
Microsoft.Office.Interop.Excel._Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
if (xlApp == null)
{
MessageBox.Show("Excel无法启动,可能是您未安装Excel软件");
return false;
}
// 创建Excel工作薄
Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, myDataGridView.ColumnCount]);
// 列索引,行索引,总列数,总行数
int colIndex = 0;
int rowIndex = 0;
int colCount = sColAry.Length;
// int colCount = 20;
int rowCount = myDataGridView.RowCount + 1;
// 创建缓存数据
object[,] objData = new object[rowCount + 1, colCount];
// 获取列标题
for (int i = 0; i < sColAry.Length; i++)
{
objData[rowIndex, colIndex++] = myDataGridView.Columns[sColAry[i]].HeaderText;
}
// 获取数据
for (rowIndex = 1; rowIndex < rowCount; rowIndex++)
{
for (colIndex = 0; colIndex < colCount; colIndex++)
{
objData[rowIndex, colIndex] = myDataGridView.Rows[rowIndex - 1].Cells[sColAry[colIndex]].Value.ToString();
}
System.Windows.Forms.Application.DoEvents();
}
//设置单元格格式
xlSheet.Cells.NumberFormatLocal = "@";
// 写入Excel
range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[rowCount + 1, colCount]);
range.Value2 = objData;
//自适应列宽
SetColumnFit(xlSheet, colCount);
//适应页宽
//SetPagetoFitWide(xlSheet);
// 保存
try
{
SaveFileDialog Dlg = new SaveFileDialog();
Dlg.DefaultExt = "xls";
Dlg.Filter = "Excel文件(*.xls)|*.xls";
Dlg.InitialDirectory = Directory.GetCurrentDirectory();
if (Dlg.ShowDialog() == DialogResult.Cancel) return false;
string filenameString = Dlg.FileName;
if (filenameString.Trim() == "") return false;
FileInfo file = new FileInfo(filenameString);
if (file.Exists)
{
try
{
file.Delete();
}
catch (Exception erro)
{
MessageBox.Show(erro.Message, "删除失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
}
xlBook.Saved = true;
if (xlApp.Version == "12.0")
xlBook.SaveCopyAs(filenameString);
else
xlBook.SaveCopyAs(filenameString);
if (openFile)
{
if (xlApp.Version == "12.0")
System.Diagnostics.Process.Start("Excel", "\"" + @filenameString + "\"");
else
System.Diagnostics.Process.Start("Excel", "\"" + @filenameString + "\"");
}
return true;
}
catch
{
MessageBox.Show("保存出错,请检查!");
return false;
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook.Worksheets);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
xlSheet = null;
range = null;
xlApp.Quit();
xlApp = null;
GC.Collect();//垃圾回收
}
}
public static void getExcelName(DataGridView dgv)
{
string dgvColumns = "";
for (int i = 0; i < dgv.ColumnCount; i++)
{
if (dgv.Columns[i].Visible == true)
{
dgvColumns += dgv.Columns[i].Name;
dgvColumns += ",";
}
}
dgvColumns = dgvColumns.Substring(0, dgvColumns.Length - 1);
DataAccess.DataGridToExcel(dgv, dgvColumns, "", true);
}