198 lines
6.8 KiB
C#
198 lines
6.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Data;
|
|
using System.Collections;
|
|
using System.Reflection;
|
|
using System.Windows.Forms;
|
|
using xiaoy.Excel;
|
|
using WinForm_Test;
|
|
using System.IO;
|
|
|
|
namespace SOH.Common
|
|
{
|
|
public class ExcelDC
|
|
{
|
|
public DataTable GetDgvToTable(DataGridView dgv)
|
|
{
|
|
DataTable dt = new DataTable();
|
|
|
|
for (int count = 0; count < dgv.Columns.Count; count++)
|
|
{
|
|
if (dgv.Columns[count].Visible == true)
|
|
{
|
|
DataColumn dc = new DataColumn(dgv.Columns[count].HeaderText.ToString());
|
|
dt.Columns.Add(dc);
|
|
}
|
|
}
|
|
DataRow dr = dt.NewRow();
|
|
for (int i = 0; i < dgv.Rows.Count; i++)
|
|
{
|
|
for (int c = 0; c < dgv.Columns.Count; c++)
|
|
{
|
|
if (dgv.Columns[c].Visible == true)
|
|
{
|
|
for (int n = 0; n < dt.Columns.Count; n++)
|
|
{
|
|
if (dgv.Columns[c].HeaderText == dr.Table.Columns[n].ColumnName)
|
|
{
|
|
dr[n] = dgv.Rows[i].Cells[c].Value == null ? "" : dgv.Rows[i].Cells[c].Value.ToString();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dt.Rows.Add(dr.ItemArray);
|
|
}
|
|
return dt;
|
|
}
|
|
public void ExportExcel(string fileName, DataGridView dgv)
|
|
{
|
|
DataTable myDGV = GetDgvToTable(dgv);
|
|
//string res = "";
|
|
if (myDGV.Rows.Count > 0)
|
|
{
|
|
|
|
string saveFileName = "";
|
|
//bool fileSaved = false;
|
|
SaveFileDialog saveDialog = new SaveFileDialog();
|
|
saveDialog.DefaultExt = "xls";
|
|
saveDialog.Filter = "Excel文件|*.xls";
|
|
saveDialog.FileName = fileName;
|
|
saveDialog.ShowDialog();
|
|
saveFileName = saveDialog.FileName;
|
|
if (saveFileName.IndexOf(":") < 0)
|
|
{
|
|
return; //被点了取消
|
|
}
|
|
|
|
frmWaitingBox f = new frmWaitingBox((obj, args) =>
|
|
{
|
|
ExcelFile.SetData(myDGV, saveFileName, ExcelVersion.Excel8, HDRType.Yes);
|
|
MessageBox.Show("导出成功!");
|
|
|
|
}, 100000, "请等待...", false, false);
|
|
f.ShowDialog();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// datatable导出excel
|
|
/// 2023-09-27 xulu 添加方法
|
|
/// </summary>
|
|
/// <param name="fileName"></param>
|
|
/// <param name="dgv"></param>
|
|
public void ExportExcel(string fileName, DataTable dgv)
|
|
{
|
|
if (dgv.Rows.Count > 0)
|
|
{
|
|
|
|
string saveFileName = "";
|
|
//bool fileSaved = false;
|
|
SaveFileDialog saveDialog = new SaveFileDialog();
|
|
saveDialog.DefaultExt = "xls";
|
|
saveDialog.Filter = "Excel文件|*.xls";
|
|
saveDialog.FileName = fileName;
|
|
saveDialog.ShowDialog();
|
|
saveFileName = saveDialog.FileName;
|
|
if (saveFileName.IndexOf(":") < 0)
|
|
{
|
|
return; //被点了取消
|
|
}
|
|
|
|
frmWaitingBox f = new frmWaitingBox((obj, args) =>
|
|
{
|
|
//数据源为空
|
|
if (dgv == null)
|
|
{
|
|
throw new Exception("无数据可导");
|
|
}
|
|
//保存路径为空
|
|
if (string.IsNullOrEmpty(saveFileName))
|
|
{
|
|
throw new Exception("未设置Excel保存路径");
|
|
}
|
|
//删除文件
|
|
if (File.Exists(saveFileName))
|
|
{
|
|
File.Delete(saveFileName);
|
|
}
|
|
|
|
DataTableToExcel(dgv, saveFileName);
|
|
MessageBox.Show("导出成功!");
|
|
|
|
}, 100000, "请等待...", false, false);
|
|
f.ShowDialog();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// datatable转excel(主要解决字段长度不够的报错问题)
|
|
/// 2023-09-27 xulu 添加方法
|
|
/// </summary>
|
|
/// <param name="dt"></param>
|
|
/// <param name="filePath"></param>
|
|
/// <returns></returns>
|
|
private static bool DataTableToExcel(DataTable dt, string filePath)
|
|
{
|
|
try
|
|
{
|
|
string bufferLine = "";
|
|
StreamWriter swObj = new StreamWriter(filePath, false, System.Text.Encoding.UTF8);
|
|
string strLine="";
|
|
for (int i = 0; i < dt.Columns.Count; i++)
|
|
{
|
|
strLine = strLine + dt.Columns[i].Caption.ToString() + ","; //写列标题
|
|
}
|
|
swObj.WriteLine(strLine);
|
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|
{
|
|
bufferLine = "";
|
|
for (int j = 0; j < dt.Columns.Count; j++)
|
|
{
|
|
if (j > 0)
|
|
{
|
|
bufferLine += ",";
|
|
}
|
|
String handleStr = dt.Rows[i][j].ToString();
|
|
|
|
//特殊符号转义,回车、换行
|
|
|
|
if (dt.Rows[i][j].ToString().Contains("\r\n"))
|
|
{
|
|
|
|
|
|
handleStr = dt.Rows[i][j].ToString().Replace("\r\n", ";");
|
|
}
|
|
|
|
if (dt.Rows[i][j].ToString().Contains("\n") || dt.Rows[i][j].ToString().Contains("\r"))
|
|
{
|
|
handleStr = dt.Rows[i][j].ToString().Replace("\n", "").Replace("\r", "");
|
|
}
|
|
|
|
//特殊符号转义,逗号
|
|
if (dt.Rows[i][j].ToString().Contains(","))
|
|
{
|
|
//双引号
|
|
if (dt.Rows[i][j].ToString().Contains("\""))
|
|
{
|
|
handleStr = dt.Rows[i][j].ToString().Replace("\"", "\"\"");
|
|
}
|
|
//逗号转义
|
|
handleStr = "\"" + handleStr + "\"";
|
|
}
|
|
bufferLine += handleStr;
|
|
}
|
|
swObj.WriteLine(bufferLine);
|
|
}
|
|
swObj.Close();
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|