C# dataGridview 导出exlex格式问题
--------------------编程问答-------------------- --------------------编程问答-------------------- 导出.xls吧,.xlsx是要office2005以上版本才能打开或WPS也能打开 --------------------编程问答-------------------- str += "\r";改成 str += "\r\n";
导出代码:
savaexcel.Filter = "Excel文件(*.xls)|*.xls|Word文件(*.doc)|*.doc|Excel文件(*.xlsx)|*.xlsx";
if (savaexcel.ShowDialog() == DialogResult.OK)
{
string filename = savaexcel.FileName;
string str = string.Empty;
for (int i = 0; i < PCGridView.Columns.Count; i++)
{
str += PCGridView.Columns[i].HeaderText + "\t";//写标题
if (i == PCGridView.Columns.Count - 1)
{
str += "\r";
}
}
for (int i = 0; i < PCGridView.RowCount; i++)
{
for (int j = 0; j < PCGridView.Columns.Count; j++)
{
str += PCGridView.Rows[i].Cells[j].Value.ToString() + "\t";
if (j == PCGridView.Columns.Count - 1)
{
str += "\r";
}
}
}
StreamWriter sw = new StreamWriter(filename, true, Encoding.GetEncoding("gb2312"));
sw.Write(str);
sw.Close();
}
MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
{
MessageBox.Show("导出失败,表格中不存在数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
这段代码可以实现出扩展名为:*.xls格式的表格,为什么用*.xlsx把数据导出去后,打开表格会报如图错误:
??? 我电脑上有这个版本的*.xlsx.
str += PCGridView.Rows[i].Cells[j].Value.ToString() + "\t";
换成
str += Regex.Replace(PCGridView.Rows[i].Cells[j].Value.ToString(), @"[^\S]", " ") + "\t";
预防内家中有\t或\r\n之类的
用记事本打开那个文件看看里面有内容是否正确? --------------------编程问答-------------------- 好我试试
按照你的方法改还是不能打开呀,用记事本打开里面的内容没有错 --------------------编程问答-------------------- 试试这个呢,网上的。
using System;--------------------编程问答-------------------- 可能和你VS引用的Excel类库有关,我记得我当初换了个新版的Excel.dll之后就可以了 --------------------编程问答--------------------
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using System.Windows.Forms;
namespace CallSystem
{
class Export
{
///<summary>
/// 将dataGridView对象里的数据导出到Excel中。
///</summary>
///<param name="datagridview">要导出数据的dataGirdView对象</param>
///<param name="SheetName">导出到Excel表格的名字</param>
public void DataGridView2Excel(System.Windows.Forms.DataGridView datagridview, string SheetName)
{
try
{
int iRows = 0;
int iCols = 0;
int iTrueCols = 0;
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(System.Reflection.Missing.Value);
Microsoft.Office.Interop.Excel.Worksheet ws = null;
if (wb.Worksheets.Count > 0)
{
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
}
else
{
wb.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
}
if (ws != null)
{
if (SheetName.Trim() != "")
{
ws.Name = SheetName;
}
iRows = datagridview.Rows.Count; //加上列头行
iTrueCols = datagridview.Columns.Count; //包含隐藏的列,一共有多少列
//求列数,省略Visible = false的列
for (int i = 0; i < datagridview.Columns.Count; i++)
{
if (datagridview.Columns[i].Visible) iCols++;
}
string[,] dimArray = new string[iRows + 1, iCols];
for (int j = 0, k = 0; j < iTrueCols; j++)
{
//省略Visible = false的列
if (datagridview.Columns[j].Visible)
{
dimArray[0, k] = datagridview.Columns[j].HeaderText;
k++;
}
}
for (int i = 0; i < iRows; i++)
{
for (int j = 0, k = 0; j < iTrueCols; j++)
{
//省略Visible = false的列
if (datagridview.Columns[j].Visible)
{
dimArray[i + 1, k] = datagridview.Rows[i].Cells[j].Value.ToString();
k++;
}
}
}
Range rang = ws.Range[ws.Cells[2, 1], ws.Cells[iRows + 1, iCols]];
rang.Value = dimArray;
rang = ws.Range[ws.Cells[1, 1], ws.Cells[1, iCols]];
rang.Font.Bold = true;
rang = ws.Range[ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]];
rang.Font.Size = 10.0;
rang = ws.Range[ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]];
rang.RowHeight=14.25;
for (int j = 0, k = 0; j < iTrueCols; j++)
{
//省略Visible = false的列
if (datagridview.Columns[j].Visible)
{
rang = ws.Range[ws.Cells[1, k + 1], ws.Cells[1, k + 1]];
rang.ColumnWidth = (datagridview.Columns[j].Width / 8.4) > 255 ? 255 : (datagridview.Columns[j].Width / 8.4);
k++;
}
}
}
app.Visible = true;
}
catch (Exception e)
{
MessageBox.Show("程序检测不到Excel类库文件,可能是您未安装Office2003以上的版本。", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
}
换支持.xlsx的dll版本 --------------------编程问答--------------------
补充:.NET技术 , C#