急急急导出的EXCEL,不能导入。 导出EXCEL我是用的拼XML串的方式导出的,没有问题,但是导出的这个EXCEL文件编辑后再导入就出错--外部表不是预期的格式。查了很多资料,都说是EXCEL格式不对必须是EXCEL的原始文件。可是怎么能导出原始格式的EXCEL文件呀。请各们给点意见。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道对你会不会有所帮助public static class INGCSV { #region 变量 /// <summary> /// 取出配置文件中的分隔符 /// </summary> private static string _splitChar = null; /// <summary> /// 取出配置文件中的编码方式 /// </summary> private static string _encodeFormat = null; #endregion #region 构造方法 /// <summary> /// 构造方法获取分隔符、编码方式 /// </summary> static INGCSV() { _splitChar = INGConfig.GetConfig(INGConstants.XML_CONFIG, INGConstants.XML_CSV_SPLIT, INGConstants.XML_SPLIT_CHAR); _encodeFormat = INGConfig.GetConfig(INGConstants.XML_CONFIG, INGConstants.XML_ENCODING, INGConstants.XML_ENCODE_FORMAT); } #endregion #region 写CSV方法 /// <summary> /// 写入CSV /// </summary> /// <param name="hasHeader">列头</param> /// <param name="dtOutputCSV">文件内容</param> public static void WriteCSV(bool hasHeader, DataTable dtOutputCSV) { // Log开始 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START); // 获取写入文件名称以及格式 String strFileName; SaveFileDialog savFileDialog = new SaveFileDialog(); savFileDialog.Reset(); savFileDialog.DefaultExt = "csv"; savFileDialog.Filter = "CSV|*.csv"; savFileDialog.ShowDialog(); strFileName = savFileDialog.FileName; // 判断文件名 if (string.IsNullOrEmpty(strFileName)) { // 信息提示 INGMessage.ShowMessage("M009", "WriteFileName"); } // 重载方法调用,写入文件 WriteCSV(hasHeader, dtOutputCSV, strFileName); // Log结束 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END); } #endregion #region 写入CSV,附带路径方法 /// <summary> /// 写入CSV,附带路径 /// </summary> /// <param name="hasHeader">列头</param> /// <param name="dtOutputCSV">文件内容</param> /// <param name="strPath">指定文件路径</param> public static void WriteCSV(bool hasHeader, DataTable dtOutputCSV, string strPath) { // Log开始 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START); // DataTable有无判断 if (dtOutputCSV == null) { throw new ArgumentNullException("Argument(dtOutputCSV) is null!"); } // StringBuilder初始化 StringBuilder sb = new StringBuilder(); // DataTable有无数据判断 if (hasHeader) { //添加列头 foreach (DataColumn dc in dtOutputCSV.Columns) { if (dc.DataType == Type.GetType("System.String")) { dc.ColumnName = "'" + dc.ColumnName + "'"; //修改 } sb.Append(dc.ColumnName).Append(_splitChar); } // 创建新行 sb.Remove(sb.Length - 1, 1); sb.Append(Environment.NewLine); } // 路径为空或者取消保存时 if(strPath == "") { return; } // 添加行 foreach (DataRow dr in dtOutputCSV.Rows) { foreach (object rowItem in dr.ItemArray)//object rowItem { object itemValue = rowItem; itemValue = "'" + itemValue + "'"; sb.Append(itemValue).Append(_splitChar); } // 创建新行 sb.Remove(sb.Length - 1, 1); sb.Append(Environment.NewLine); } using (TextWriter tw = new StreamWriter(strPath, false, Encoding.GetEncoding(_encodeFormat))) { tw.Write(sb.ToString()); INGMessage.ShowMessage("M010", "Success"); tw.Flush(); tw.Close(); } // Log结束 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END); } #endregion #region 读CSV文件方法 /// <summary> /// 读CSV文件 /// </summary> /// <param name="hasHeader">列头</param> /// <returns>返回信息</returns> public static DataTable ReadCSV(bool hasHeader) { // Log开始 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START); String strFileName; using (OpenFileDialog ofdFileDialog = new OpenFileDialog()) { ofdFileDialog.Reset(); ofdFileDialog.DefaultExt = "csv"; ofdFileDialog.Filter = "CSV|*.csv"; ofdFileDialog.ShowDialog(); // 文件名取得 strFileName = ofdFileDialog.FileName; } // 文件路径取得 String strFilePath = Path.GetFileName(strFileName); // 文件路径判断 if (string.IsNullOrEmpty(strFilePath)) { return null; } // Log结束 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END); return ReadCSV(hasHeader, strFilePath); } #endregion #region 读指定路径CSV文件方法 /// <summary> /// 读指定路径CSV文件 /// </summary> /// <param name="hasHeader">列头</param> /// <param name="strPath">指定文件路径</param> /// <returns>返回信息</returns> public static DataTable ReadCSV(bool hasHeader, string strPath) { // Log开始 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START); String FileName = Path.GetFileName(strPath); // 文件路径判断 if (string.IsNullOrEmpty(FileName)) { return null; } DataTable dt = new DataTable(FileName); // 文本文件分析instance生成 TextFieldParser parser = new TextFieldParser(strPath, Encoding.GetEncoding(_encodeFormat)); // 指定文件形式 parser.TextFieldType = FieldType.Delimited; // 段落分割 parser.SetDelimiters(_splitChar); // 设置CSV行计数 int iRowCnt = 0; // 到文件最后边界 while (!parser.EndOfData) { // 读入一行 string[] row = parser.ReadFields(); // CSV行判断 if (iRowCnt.Equals(0)) { // 判断列头有无 if (hasHeader) { int i = 0; // 添加列到行 foreach (string sColumn in row) { // DataColumn初始化 DataColumn column = new DataColumn(); column.DataType = Type.GetType("System.String"); string sColumnValue = sColumn; sColumnValue = sColumnValue.Substring(1, sColumnValue.Length - 2); column.ColumnName = sColumnValue; dt.Columns.Add(column); } } } // 数据 else //修改 { // 行添加 int rowLength = row.Length; DataRow dr = dt.NewRow(); for (int j = 0; j < rowLength;j++ ) { string columnValue = row.GetValue(j).ToString(); columnValue = columnValue.Substring(1, columnValue.Length - 2); dr[j] = columnValue; } dt.Rows.Add(dr); } // CSV行计数 iRowCnt++; } // Log结束 INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END); return dt; } #endregion } public void DataToExcel(DataGridView dataGridView, ProgressBar progressBar){ if (dataGridView.RowCount == 0) { MessageBox.Show("没有可导出的数据!"); } Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); excel.Application.Workbooks.Add(true); for (int i = 0; i < dataGridView.ColumnCount; i++) { excel.Cells[1, i + 1] = dataGridView.Columns[i].HeaderText; } for (int i = 0; i < dataGridView.RowCount - 1; i++) { for (int j = 0; j < dataGridView.ColumnCount; j++) { excel.Cells[i + 2, j + 1] = dataGridView.Rows[i].Cells[j].Value.ToString(); } } excel.Visible = true;}这是将DataGridView中的数据导出为excel源文件的代码。DataSet的也差不多。要添加一个Excel一个引用。 索引和长度必须引用该字符串内的位置 C# pictureBox.Image.Save问题 winform中使用HttpWebRequest传送xml格式字符串,如何在asp.net页面中接收它的值呢? 怎样获取指定服务的相关数据 调用“过程名”时参数个数或类型错误 第1行 第7列 循环访问DataGridView行,设置外键问题 读取xml文件时出错:"根级别上的数据无效" 菜鸟问题:c#中布尔型量的使用 c#中,xml與數據庫之間數據讀寫問題 高手指导我一下!~~ 注册其他画面控件的事件的问题 C#开发类似QQ聊天框
public static class INGCSV
{
#region 变量
/// <summary>
/// 取出配置文件中的分隔符
/// </summary>
private static string _splitChar = null; /// <summary>
/// 取出配置文件中的编码方式
/// </summary>
private static string _encodeFormat = null;
#endregion #region 构造方法
/// <summary>
/// 构造方法获取分隔符、编码方式
/// </summary>
static INGCSV()
{
_splitChar = INGConfig.GetConfig(INGConstants.XML_CONFIG, INGConstants.XML_CSV_SPLIT, INGConstants.XML_SPLIT_CHAR);
_encodeFormat = INGConfig.GetConfig(INGConstants.XML_CONFIG, INGConstants.XML_ENCODING, INGConstants.XML_ENCODE_FORMAT);
}
#endregion #region 写CSV方法
/// <summary>
/// 写入CSV
/// </summary>
/// <param name="hasHeader">列头</param>
/// <param name="dtOutputCSV">文件内容</param>
public static void WriteCSV(bool hasHeader, DataTable dtOutputCSV)
{
// Log开始
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START); // 获取写入文件名称以及格式
String strFileName;
SaveFileDialog savFileDialog = new SaveFileDialog(); savFileDialog.Reset();
savFileDialog.DefaultExt = "csv";
savFileDialog.Filter = "CSV|*.csv";
savFileDialog.ShowDialog(); strFileName = savFileDialog.FileName; // 判断文件名
if (string.IsNullOrEmpty(strFileName))
{
// 信息提示
INGMessage.ShowMessage("M009", "WriteFileName");
} // 重载方法调用,写入文件
WriteCSV(hasHeader, dtOutputCSV, strFileName); // Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
}
#endregion #region 写入CSV,附带路径方法
/// <summary>
/// 写入CSV,附带路径
/// </summary>
/// <param name="hasHeader">列头</param>
/// <param name="dtOutputCSV">文件内容</param>
/// <param name="strPath">指定文件路径</param>
public static void WriteCSV(bool hasHeader, DataTable dtOutputCSV, string strPath)
{
// Log开始
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START); // DataTable有无判断
if (dtOutputCSV == null)
{
throw new ArgumentNullException("Argument(dtOutputCSV) is null!");
} // StringBuilder初始化
StringBuilder sb = new StringBuilder(); // DataTable有无数据判断
if (hasHeader)
{
//添加列头
foreach (DataColumn dc in dtOutputCSV.Columns)
{
if (dc.DataType == Type.GetType("System.String"))
{
dc.ColumnName = "'" + dc.ColumnName + "'"; //修改
}
sb.Append(dc.ColumnName).Append(_splitChar);
}
// 创建新行
sb.Remove(sb.Length - 1, 1);
sb.Append(Environment.NewLine);
}
// 路径为空或者取消保存时
if(strPath == "")
{
return;
}
// 添加行
foreach (DataRow dr in dtOutputCSV.Rows)
{
foreach (object rowItem in dr.ItemArray)//object rowItem
{
object itemValue = rowItem;
itemValue = "'" + itemValue + "'";
sb.Append(itemValue).Append(_splitChar);
}
// 创建新行
sb.Remove(sb.Length - 1, 1);
sb.Append(Environment.NewLine);
} using (TextWriter tw = new StreamWriter(strPath, false, Encoding.GetEncoding(_encodeFormat)))
{
tw.Write(sb.ToString());
INGMessage.ShowMessage("M010", "Success");
tw.Flush();
tw.Close();
} // Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
}
#endregion #region 读CSV文件方法
/// <summary>
/// 读CSV文件
/// </summary>
/// <param name="hasHeader">列头</param>
/// <returns>返回信息</returns>
public static DataTable ReadCSV(bool hasHeader)
{
// Log开始
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START);
String strFileName;
using (OpenFileDialog ofdFileDialog = new OpenFileDialog())
{
ofdFileDialog.Reset();
ofdFileDialog.DefaultExt = "csv";
ofdFileDialog.Filter = "CSV|*.csv";
ofdFileDialog.ShowDialog(); // 文件名取得
strFileName = ofdFileDialog.FileName;
} // 文件路径取得
String strFilePath = Path.GetFileName(strFileName); // 文件路径判断
if (string.IsNullOrEmpty(strFilePath))
{
return null;
} // Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
return ReadCSV(hasHeader, strFilePath);
}
#endregion #region 读指定路径CSV文件方法
/// <summary>
/// 读指定路径CSV文件
/// </summary>
/// <param name="hasHeader">列头</param>
/// <param name="strPath">指定文件路径</param>
/// <returns>返回信息</returns>
public static DataTable ReadCSV(bool hasHeader, string strPath)
{
// Log开始
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START);
String FileName = Path.GetFileName(strPath); // 文件路径判断
if (string.IsNullOrEmpty(FileName))
{
return null;
} DataTable dt = new DataTable(FileName); // 文本文件分析instance生成
TextFieldParser parser = new TextFieldParser(strPath, Encoding.GetEncoding(_encodeFormat)); // 指定文件形式
parser.TextFieldType = FieldType.Delimited; // 段落分割
parser.SetDelimiters(_splitChar); // 设置CSV行计数
int iRowCnt = 0; // 到文件最后边界
while (!parser.EndOfData)
{
// 读入一行
string[] row = parser.ReadFields();
// CSV行判断
if (iRowCnt.Equals(0))
{
// 判断列头有无
if (hasHeader)
{
int i = 0;
// 添加列到行
foreach (string sColumn in row)
{
// DataColumn初始化
DataColumn column = new DataColumn();
column.DataType = Type.GetType("System.String"); string sColumnValue = sColumn;
sColumnValue = sColumnValue.Substring(1, sColumnValue.Length - 2); column.ColumnName = sColumnValue;
dt.Columns.Add(column);
}
}
}
// 数据
else //修改
{
// 行添加
int rowLength = row.Length;
DataRow dr = dt.NewRow();
for (int j = 0; j < rowLength;j++ )
{
string columnValue = row.GetValue(j).ToString();
columnValue = columnValue.Substring(1, columnValue.Length - 2);
dr[j] = columnValue;
}
dt.Rows.Add(dr);
}
// CSV行计数
iRowCnt++;
} // Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
return dt;
}
#endregion
}
public void DataToExcel(DataGridView dataGridView, ProgressBar progressBar)
{
if (dataGridView.RowCount == 0)
{
MessageBox.Show("没有可导出的数据!");
} Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Application.Workbooks.Add(true); for (int i = 0; i < dataGridView.ColumnCount; i++)
{
excel.Cells[1, i + 1] = dataGridView.Columns[i].HeaderText;
} for (int i = 0; i < dataGridView.RowCount - 1; i++)
{
for (int j = 0; j < dataGridView.ColumnCount; j++)
{
excel.Cells[i + 2, j + 1] = dataGridView.Rows[i].Cells[j].Value.ToString();
}
}
excel.Visible = true;
}这是将DataGridView中的数据导出为excel源文件的代码。DataSet的也差不多。
要添加一个Excel一个引用。