在做数据导出到excel时(c#),在本机上能导出表格,但是移到服务器上就没有反应?
建议换用三方组件NPOI。
你现在导出的Excel是调用系统安装的Excel的组件。倘若服务器上没有安装Excel或安装的Excel版本不对,都会导致导出失败。
再者,你放到服务器上,导出Excel后需要解决杀进程的问题,因为每次导出Excel时候,都会启动一个Excelexe进程,导出结束后该进程不能自动关闭,需要写代码杀掉它,很麻烦。如果你做的是WebForm,还要解决调用安全问题。
所以,我建议用三方组件NPOI来实现导出Excel,它的优点是不需要考虑上面说的问题,且导出速度快。
NPOI的使用需要另行百度。
之前做过一次,在网上找到的人家的源码,自己加强了一下健壮性,你试试看能不能用。下面的是后台的逻辑代码!没有分层,所有代码是混在一块的
using System;
using SystemConfiguration;
using SystemData;
using SystemWeb;
using SystemWebSecurity;
using SystemWebUI;
using SystemWebUIHtmlControls;
using SystemWebUIWebControls;
using SystemWebUIWebControlsWebParts;
using SystemDataOleDb;
using SystemDataSqlClient;
public partial class ImportSCI : SystemWebUIPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnUpload_Click(object sender, EventArgs e)
{
//确保已经选择了待导入的文件,首先上传,然后在服务器端完成导入
if (thisfuOpenPostedFileFileName != "")
{
//确保文件是excel格式
//ResponseWrite(thisfuOpenFileNameSubstring(thisfuOpenFileNameLastIndexOf('')));
if (thisfuOpenFileNameSubstring(thisfuOpenFileNameLastIndexOf('') + 1) == "xls")
{
Random rd = new Random(1);
string filename = DateTimeNowDateToString("yyyymmdd") + DateTimeNowToLongTimeString()Replace(":", "") + rdNext(9999)ToString() + "xls";
try
{
thisfuOpenPostedFileSaveAs(@ServerMapPath("fileupload/") + filename);
}
catch (HttpException he)
{
ResponseWrite("文件上传不成功,请检查文件是否过大,是否有写权限!");
return;
}
#region --------读取文件内容到服务器内存----------
string conn = " Provider = MicrosoftJetOLEDB40 ; Data Source =" + ServerMapPath("fileupload") + "/" + filename + ";Extended Properties=Excel 80";
OleDbConnection thisconnection = new OleDbConnection(conn);
thisconnectionOpen();
//要保证字段名和excel表中的字段名相同
string Sql = "select from [Sheet1$]";
OleDbDataAdapter mycommand = new OleDbDataAdapter(Sql, thisconnection);
DataSet ds = new DataSet();
mycommandFill(ds, "[Sheet1$]");
thisconnectionClose();
thisGridView1DataSource = ds;
thisGridView1DataBind();
#endregion
#region --------插入到数据库中---------
string conn1 = "Server=(local);database=QK;Uid=sa1;Pwd=1234";
SqlConnection thisconnection1 = new SqlConnection(conn1);
thisconnection1Open();
int count = dsTables["[Sheet1$]"]RowsCount;
for (int i = 0; i < count; i++)
{
string ID,TITLE, ISSN, ei, DL, XL;
ID = dsTables["[Sheet1$]"]Rows[i]["ID"]ToString();
TITLE = dsTables["[Sheet1$]"]Rows[i]["TITLE"]ToString();
ISSN = dsTables["[Sheet1$]"]Rows[i]["ISSN"]ToString();
ei = dsTables["[Sheet1$]"]Rows[i]["e"]ToString();
DL = dsTables["[Sheet1$]"]Rows[i]["DL"]ToString();
//XL = dsTables["[Sheet1$]"]Rows[i]["XL"]ToString();
//string excelsql = "insert into SCI(ID, TITLE, ISSN, e, DL, XL) values ('" + ID + "','" + TITLE + "','" + ISSN + "','" + ei + "','"+DL+"','"+XL+"') ";
string excelsql = "insert into SCI(ID, TITLE, ISSN, e, DL) values ('" + ID + "','" + TITLE + "','" + ISSN + "','" + ei + "','" + DL + "'"+") ";
SqlCommand mycommand1 = new SqlCommand(excelsql, thisconnection1);
try
{
mycommand1ExecuteNonQuery();
}
catch (SqlException ode)
{
//ResponseWrite("<b>导入过程出现异常,请检查是否需要重新导入!</b>");
ResponseWrite(odeMessageToString());
return;
}
}
ResponseWrite("更新成功");
thisconnection1Close();
#endregion
}
else
{
ResponseWrite("导入文件的格式不正确!");
}
}
else
{
ResponseWrite("您还没有选择要导入的文件!");
}
}
}
工具-共享工作薄 在excel中,多人同时加工一个工作薄(excel共享) 一、设置共享工作簿 我们可以先举个例子:假设有甲乙丙丁四个用户分工合作共同完成录入操作,四人分别在001、002、003、004号机器上同时操作,这四台机器都已经与000号电脑通过
SpreadJS由于是一款纯前端的控件,默认支持的是纯前端的导入导出。
如果要导出到服务器端需要将前端生成的blob对象通过ajax或者form表单提交的方式传递到后台,后台接收到后转存为xlsx格式的Excel文件即可。
详细可以参考下面链接的文章
网页链接
这需要你在程序里面设置,把他设置成只要有人运行程序时就自动去找表格才行,如果说单一的共享表格,那太简单了。只要你把表格放在你的共享文件夹进而面,或者你把表格所在的文件夹右键属性-共享就可以了。
0条评论