ASP.NET导出EXCEL2007 打开时会出现如下信息
ASP.NET 用 KinnSoft.Excel.OfficeOpenXml.dll将EXCEL2007 生成在服务器,接着写入Response后在客户端打开页面会出现如下错误:EXCEL 在“XX.XLSX”中发现不可读内容。是否恢复此工作簿的内容?如果信任此工作簿的内容,请单“是”。
在服务器生成的EXCEL打开是不会出现这个错误的。
下载代码如下:
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); //设置回发内容为Excel
Response.ContentType = "application/ms-excel"; //application/octet-stream
Response.WriteFile(path + fileName);
顺便带句:有没更好的导出EXCEL2007的方法呢?
--------------------编程问答-------------------- 我有导出2003的 ,没有问题哦。 你要嘛? --------------------编程问答--------------------
谢谢,暂不需要。 --------------------编程问答--------------------
更改如下:如何导出EXCEL 2007格式的EXCEL文件,不需在服务器生成文件。谢谢 --------------------编程问答-------------------- http://blog.csdn.net/chen846262292/article/details/7348629
看能不能帮到你 --------------------编程问答-------------------- 这个是Excel的帮助类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Odbc;
using System.Data;
using System.Diagnostics; // 命名空间提供特定的类,使您能够与系统进程、事件日志和性能计数器进行交互
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
namespace MyExcelWeb.ExcelUtility
{
/// <summary>
/// Excel数据操作类
/// </summary>
public class ExcelHelper
{
/// <summary>
/// 导入CVS文件格式
/// </summary>
/// <param name="fileName"></param>
/// <param name="path"></param>
/// <returns></returns>
public static DataSet ConnectCSVFile(string fileName, string path)
{
string strConn = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=";
strConn += path;
strConn += ";Extensions=asc,csv,tab,txt;HDR=Yes;Persist Security Info=False";
OdbcConnection objConn = new OdbcConnection(strConn);
DataSet ds = new DataSet();
try
{
string strSql = "select * from " + fileName; //fileName, For example: 1.csv
OdbcDataAdapter odbcCSVDataAdapter = new OdbcDataAdapter(strSql, objConn);
odbcCSVDataAdapter.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
System.GC.Collect();
}
return ds;
}
/// <summary>
/// 导入Excel文件
/// </summary>
/// <param name="filepath"></param>
/// <param name="ExcelName"></param>
/// <returns></returns>
/// IMEX=1将强制混合数据转换为文本,HDR=NO将第一行作为内容,由于第一行Header都是文本,因此所有列的类型都将转换成文本。
public static DataSet ExcelToDataTable(string filepath, string ExcelName)
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;IMEX=1;HDR=YES'";
System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
string strCom = "SELECT * FROM " + "[" + ExcelName + "$]";//读取Excel文件内容
Conn.Open();
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
DataSet ds = new DataSet();
myCommand.Fill(ds, ExcelName);
Conn.Close();
return ds;
}
/// <summary>
/// 导出Excel文件
/// </summary>
/// <param name="tmpDataTable"></param>
/// <param name="strFileName"></param>
public static void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName)
{
//检查进程
List<Process> excelProcesses = GetExcelProcesses();
if (excelProcesses.Count > 0)
{
KillTheExcel();//杀死进程
}
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
try
{
if (tmpDataTable == null)
return;
int rowNum = tmpDataTable.Rows.Count;
int columnNum = tmpDataTable.Columns.Count;
int rowIndex = 1;//如果需要导出列名,设置为1,否则设置为0
int columnIndex = 0;
xlApp.DefaultFilePath = "";
xlApp.DisplayAlerts = true;
xlApp.SheetsInNewWorkbook = 1;
Excel.Worksheet ExcelSheet = (Worksheet)xlBook.Worksheets[1];
//将DataTable的列名导入Excel表第一行(如果需要可以加上)
foreach (DataColumn dc in tmpDataTable.Columns)
{
columnIndex++;
xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;
}
//将DataTable中的数据导入Excel中
for (int i = 0; i < rowNum; i++)
{
rowIndex++;
columnIndex = 0;
for (int j = 0; j < columnNum; j++)
{
columnIndex++;
xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString();
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
xlApp.Workbooks.Close();
xlApp.Quit();//关闭进程,自动保存
System.GC.Collect();
}
}
/// <summary>
/// 获得进程
/// </summary>
/// <returns></returns>
private static List<Process> GetExcelProcesses()
{
Process[] processes = Process.GetProcesses();
List<Process> ListProcess = new List<Process>();
foreach (Process _pr in processes)
{
if (_pr.ProcessName.ToUpper().Equals("EXCEL"))
{
ListProcess.Add(_pr);
}
}
return ListProcess;
}
/// <summary>
/// 销毁所有Excel进程
/// </summary>
public static void KillTheExcel()
{
List<Process> listProcess = GetExcelProcesses();
foreach (Process _pr in listProcess)
{
_pr.Kill();
}
}
}
}
--------------------编程问答-------------------- 还需要一个名为“Aspose.Excel.dll”的文件自己网上找或者加我QQ:1977613110我传给你。 --------------------编程问答-------------------- 打开的时候好像是打开的副本,因为你的Excel被占用着
你是不是没有关闭打开的那个Excel程序? --------------------编程问答--------------------
谢谢你的回答,这种方种有时候进程杀不掉。 --------------------编程问答--------------------
如何生成EXCEL 2007 格式的呢? --------------------编程问答-------------------- 最近在win server 2003上弄Word 2007,Excel 2007总是不能成功,太郁闷了。 --------------------编程问答-------------------- 最近也碰到GridView导出EXCEL问题。晚上大部分都是导出EXCEL2003但是那种方式在导出打开时会报一个错误。不知道现在导出EXCEL2007怎么搞~!~! --------------------编程问答-------------------- 我觉得想到处excel直接从dataset导出,不要依赖于控件,这样更方便
补充:.NET技术 , ASP.NET