//datagridview不显示空值,即隐藏空值列
public static DataGridView RemoveEmptyCol(DataGridView grdView)
{
foreach (DataGridViewColumn clm in grdView.Columns)
{
bool notAvailable = true;
foreach (DataGridViewRow row in grdView.Rows)
{
if (!string.IsNullOrEmpty(row.Cells[clm.Index].Value.ToString()))
{
notAvailable = false;
break;
}
}
if (notAvailable)
{
grdView.Columns[clm.Index].Visible = false;
}
}
return grdView;
}
//导出是去掉隐藏列
public static void DataToExcel(string FileName, DataGridView m_DataView, DataTable dt)
{
if (FileName.Length != 0)
{
FileStream objFileStream;
string strLine = "";
objFileStream = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter objStreamWriter = new StreamWriter(objFileStream, System.Text.Encoding.Unicode);
for (int i = 0; i < m_DataView.Columns.Count; i++)
{
if (m_DataView.Columns[i].Visible == true)
{
strLine = strLine + m_DataView.Columns[i].HeaderText.ToString() + Convert.ToChar(9);
}
}
objStreamWriter.WriteLine(strLine);
strLine = "";
for (int i = 0; i < m_DataView.Rows.Count; i++)
{
for (int j = 0; j < m_DataView.Columns.Count; j++)
{
if (m_DataView.Columns[j].Visible == true)
{
if (m_DataView.Rows[i].Cells[j].Value == null)
strLine = strLine + " " + Convert.ToChar(9);
else
{
string rowstr = "";
rowstr = m_DataView.Rows[i].Cells[j].Value.ToString();
if (rowstr.IndexOf("\r\n") > 0)
rowstr = rowstr.Replace("\r\n", " ");
if (rowstr.IndexOf("\t") > 0)
rowstr = rowstr.Replace("\t", " ");
strLine = strLine + rowstr + Convert.ToChar(9);
}
}
}
objStreamWriter.WriteLine(strLine);
strLine = "";
}
objStreamWriter.Close();
objFileStream.Close();
}
}
////////////////////////////////////////////////////////
private void BtnExportToExcel_Click(object sender, EventArgs e)
{
if (dt.Rows.Count <= 0)
{
return;
}
this.saveFileDialog1.FileName = "查询xls";
if (this.saveFileDialog1.ShowDialog() != DialogResult.OK)
{
return;
}
fileName = this.saveFileDialog1.FileName.Trim();
if (!fileName.ToLower().EndsWith(".xls"))
{
fileName = fileName + ".xls";
}
string errMsg = "";
bool ok = ExcelHelper.ExportToExcel(dt, fileName, "查询", out errMsg);
}
public class ExcelHelper
{
public static bool ExportToExcel(DataTable SourceDataTable, string FileName, string SheetName, out string ErrMsg)
{
ErrMsg = string.Empty;
FileStream fs = null;
try
{
if (File.Exists(FileName))
File.Delete(FileName);
Thread.Sleep(5000);
fs = new FileStream(FileName, FileMode.CreateNew, FileAccess.Write);
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.CreateSheet(SheetName);
CreateHeader(SourceDataTable, workbook, sheet);
FillData(SourceDataTable, workbook, sheet);
workbook.Write(fs);
Thread.Sleep(1000 * 30);
return true;
}
catch (Exception ex)
{
ErrMsg = ex.Message + "\r\n" + ex.StackTrace;
return false;
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
}
}
}
public static bool ExportToExcel(DataSet SourceDataSet, string FileName, string[] SheetNames, out string ErrMsg)
{
ErrMsg = string.Empty;
FileStream fs = null;
try
{
if (File.Exists(FileName))
File.Delete(FileName);
fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
HSSFWorkbook workbook = new HSSFWorkbook();
for (int i = 0; i < SourceDataSet.Tables.Count; i++)
{
HSSFSheet sheet = workbook.CreateSheet(SheetNames[i]);
CreateHeader(SourceDataSet.Tables[i], workbook, sheet);
FillData(SourceDataSet.Tables[i], workbook, sheet);
}
workbook.Write(fs);
return true;
}
catch (Exception ex)
{
ErrMsg = ex.Message + "\r\n" + ex.StackTrace;
return false;
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
}
}
}
public static bool FillSheet(DataTable SourceDataTable, HSSFWorkbook Workbook, HSSFSheet Sheet, out string ErrMsg)
{
ErrMsg = string.Empty;
try
{
CreateHeader(SourceDataTable, Workbook, Sheet);
FillData(SourceDataTable, Workbook, Sheet);
return true;
}
catch (Exception ex)
{
ErrMsg = ex.Message + "\r\n" + ex.StackTrace;
return false;
}
}
private static void CreateHeader(DataTable SourceDataTable, HSSFWorkbook Workbook, HSSFSheet Sheet)
{
HSSFCellStyle headStyle = Workbook.CreateCellStyle();
headStyle.Alignment = CellHorizontalAlignment.CENTER;
HSSFFont font = Workbook.CreateFont();
font.FontHeightInPoints = 10;
font.Boldweight = 200;
headStyle.SetFont(font);
for (int i = 0; i < SourceDataTable.Columns.Count; i++)
{
HSSFRow row = Sheet.CreateRow(0);
HSSFCell cell = row.CreateCell(i);
row.HeightInPoints = 25f;
cell.CellStyle = headStyle;
cell.SetCellValue(SourceDataTable.Columns[i].ColumnName);
}
}
private static void FillData(DataTable SourceDataTable, HSSFWorkbook Workbook, HSSFSheet Sheet)
{
int rows = SourceDataTable.Rows.Count;
int cols = SourceDataTable.Columns.Count;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
HSSFRow row = Sheet.CreateRow(i + 1);
row.HeightInPoints = 15f;
HSSFCell cell = null;
string valueStr = SourceDataTable.Rows[i][j].ToString();
switch (SourceDataTable.Columns[j].DataType.ToString())
{
case "System.String"://字符串类型
cell = row.CreateCell(j, HSSFCellType.STRING);
cell.SetCellValue(valueStr);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(valueStr, out dateV);
cell = row.CreateCell(j, HSSFCellType.STRING);
cell.SetCellValue(dateV);
//cell.CellStyle = dateStyle;//格式化显示
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(valueStr, out boolV);
cell = row.CreateCell(j, HSSFCellType.BOOLEAN);
cell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = 0;
int.TryParse(valueStr, out intV);
cell = row.CreateCell(j, HSSFCellType.NUMERIC);
cell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = 0;
double.TryParse(valueStr, out doubV);
cell = row.CreateCell(j, HSSFCellType.NUMERIC);
cell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
cell = row.CreateCell(j, HSSFCellType.STRING);
cell.SetCellValue("");
break;
default:
cell = row.CreateCell(j, HSSFCellType.STRING);
cell.SetCellValue("");
break;
}
int colNameLength = SourceDataTable.Columns[j].ColumnName.Length;
int valueLength = SourceDataTable.Rows[0][j].ToString().Length;
int maxLength = Math.Max(colNameLength, valueLength);
if (maxLength < 5)
maxLength = 5;
Sheet.SetColumnWidth(j, maxLength * 400);
}
}
HSSFRow rowRemark = Sheet.CreateRow(rows + 1);
HSSFCell cellRemark = rowRemark.CreateCell(0, HSSFCellType.BLANK);
}
}