请教高手关于服务器端导入客户端excel问题

dlut_qimingxing 2010-05-19 08:55:36
网站,浏览客户端excel,导入服务器端数据库。不能上传文件到服务器端。捕获上传文件流,excel操作,实现存入服务器端数据库。跪求高手解决。
...全文
236 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不用, 按我的办法, 直接就读了。 不用非的传到服务器上
yan267 2010-05-19
  • 打赏
  • 举报
回复
先上传处理,完了就删除掉它。
  • 打赏
  • 举报
回复
strPath 是 execl路径
strTableName execl里面的 页签
  • 打赏
  • 举报
回复
你能看懂不。。
代码都这么明显了
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+ strPath +"';Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";

这个是说 读取方式 是读取 execl

OleDbConnection cnnxls = new OleDbConnection(mystring);

OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [" + strTableName + "]", cnnxls);

DataSet myDs = new DataSet();

try
{
myDa.Fill(myDs);
}
catch
{
// JScript.Alert(ex.Message);
return null;
}
这就把execl读到了 myDa里。。 其实这几句已经实现了把execl读到dataset里
然后就循环 myda
保存到 数据库里就行了 自己研究下都不行。
dlut_qimingxing 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wang2129929 的回复:]
11楼已经把代码给你了。 。 你自己研究下就行

不想保存到服务器上, 就把
string strPath = Server.MapPath("..\\UpFile\\"+"equBaseExcel"+this.g_StaffNo+".xls");
//保存到服务器
try
{
this.ExcelUpload.PostedFile.SaveAs(strPath);
}
cat……
[/Quote]
11楼的高手还是把excel保存到服务器了。
14楼注释了这段代码根本就是错误啊?
#region 读取Excel返回DataSet
private DataSet ReadExcel(string strPath,string strTableName)
{
//Sheet1$
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+ strPath +"';Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";

OleDbConnection cnnxls = new OleDbConnection (mystring);

OleDbDataAdapter myDa =new OleDbDataAdapter("select * from ["+strTableName+"]",cnnxls);

DataSet myDs =new DataSet();

这个还是在读服务器上的excel啊?
kurorolove 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wang2129929 的回复:]

11楼已经把代码给你了。 。 你自己研究下就行

不想保存到服务器上, 就把
string strPath = Server.MapPath("..\\UpFile\\"+"equBaseExcel"+this.g_StaffNo+".xls");
//保存到服务器
try
{
this.ExcelUpload.PostedFile.SaveAs(strPath);
}
……
[/Quote]
你把那保存的代码注释了,请问你怎么读取EXCEL那?就是你那个this.ReadExcel()方法,还能用吗?
  • 打赏
  • 举报
回复
11楼已经把代码给你了。 。 你自己研究下就行

不想保存到服务器上, 就把
string strPath = Server.MapPath("..\\UpFile\\"+"equBaseExcel"+this.g_StaffNo+".xls");
//保存到服务器
try
{
this.ExcelUpload.PostedFile.SaveAs(strPath);
}
catch(System.Exception ex)
{
JScript.Alert(ex.Message);
return;
}
注释上。。 悲哀
kurorolove 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ynsky 的回复:]

先上传到服务器,然后在导入!!!!!!!
[/Quote]
人家就是不想保存,直接操作数据流。期待高手出现
pgameli 2010-05-19
  • 打赏
  • 举报
回复
1、把excel上传到服务器
2、读取excel填充到dataset(与读取数据表的方式一样)
3、再用dataadaperter读取这个dataset到datatable(datatable需要你自己建一下,字段名和类型必须与数据库对应)
4、循环这个datatable添加到数据库就行了

具体代码你可以到网上搜一下,多的数不清
  • 打赏
  • 举报
回复
重读取到保存
前台
<input id="ExcelUpload" type="file" style="WIDTH: 98%" runat="server" NAME="ExcelUpload">
<asp:Button ID="btnSave" Width="70" Text="导入" Runat="server" Visible="True"></asp:Button>
后台 保存按钮事件
#region 导入按钮事件
private void btnSave_Click(object sender, EventArgs e)
{
if(this.ExcelUpload.Value == "")
{
JScript.Alert("请选择一个Excel文件!");
return;
}

if(this.ExcelUpload.Value.ToLower().IndexOf(".xls") != this.ExcelUpload.Value.Length-4)
{
JScript.Alert("请选择Excel格式的文档,若该Excel文件正在使用请关闭它!");
return;
}
/*
string strFileType = this.ExcelUpload.PostedFile.ContentType.ToString();
if(strFileType.ToLower() != "application/vnd.ms-excel")
{
//this.Response.Write(strFileType);
JScript.Alert("请选择Excel格式的文档,若该Excel文件正在使用请关闭它!");
return;
}
*/
string strPath = Server.MapPath("..\\UpFile\\"+"equBaseExcel"+this.g_StaffNo+".xls");
//保存到服务器
try
{
this.ExcelUpload.PostedFile.SaveAs(strPath);
}
catch(System.Exception ex)
{
JScript.Alert(ex.Message);
return;
}

string strParaXml = this.ReturnXml(strPath);;
if(strParaXml == "") return;

//JScript.Alert(strParaXml);
//return;
string strReturn = this.m_objPublic.SaveDataXML(strParaXml,"astBaseMAddFromExcel");

if (strReturn.Substring(0,1) == "1")
{
JScript.Alert("导入成功!");
}
else
{
JScript.Alert(strReturn);
}
}


private string ReturnXml(string strPath)
{
//读取excel中的内容为DataSet
DataSet dstTemp = this.ReadExcel(strPath,"设备明细主表$");
if(dstTemp == null)
{
return "";
}
if(dstTemp.Tables[0].Rows.Count == 0)
{
JScript.Alert("工作表[设备明细主表]中没有数据,请检查!");
return "";
}

string strParaXml = "";
int i = 0;
try
{
foreach(DataRow dr in dstTemp.Tables[0].Rows)
{
string strEquNo = StringUtil.ConvertXML(dr["设备编号"].ToString().Trim());
if(strAssetsNo != "")
{
string strBuyPrice = StringUtil.ConvertXML(dr["原值"].ToString());
string strSurpRate = StringUtil.ConvertXML(dr["净残率(%)"].ToString());
string strSurplus = StringUtil.ConvertXML(dr["残值"].ToString());

if(strBuyPrice == "")
{
strBuyPrice = "0";
}
if(strSurpRate == "")
{
strSurpRate = "0";
}
if(strSurplus == "")
{
strSurplus = "0";
}

if (!ValidateUtil.IsNumeric(strBuyPrice))
{
JScript.Alert("["+strAssetsNo+"]原值请输入数字!");
return "";
}
if (!ValidateUtil.IsNumeric(strSurpRate))
{
JScript.Alert("["+strAssetsNo+"]净残率(%)请输入数字!");
return "";
}
if (!ValidateUtil.IsNumeric(strSurplus))
{
JScript.Alert("["+strAssetsNo+"]残值请输入数字!");
return "";
}
string strTotalDepr = StringUtil.ConvertXML(dr["累计折旧金额"].ToString());
if(strTotalDepr == "")
{
strTotalDepr = "0";
}
if (!ValidateUtil.IsNumeric(strTotalDepr))
{
JScript.Alert("["+strAssetsNo+"]累计折旧金额请输入数字!");
return "";
}

string strUseMonth = StringUtil.ConvertXML(dr["可使用月限"].ToString().Trim());
string strKeepMonth = StringUtil.ConvertXML(dr["保修期"].ToString().Trim());

if(strUseMonth == "")
{
strUseMonth = "0";
}
if(strKeepMonth == "")
{
strKeepMonth = "0";
}
if (!ValidateUtil.IsNumber(strUseMonth))
{
JScript.Alert("["+strAssetsNo+"]可使用月限请输入整数!");
return "";
}
if (!ValidateUtil.IsNumber(strKeepMonth))
{
JScript.Alert("["+strAssetsNo+"]保修期请输入整数!");
return "";
}
string strUseDate = StringUtil.ConvertXML(dr["使用日期"].ToString());

if (!ValidateUtil.IsDate(strUseDate))
{
JScript.Alert("["+strAssetsNo+"]使用日期请输入正确格式!");
return "";
}
string strBuyDate = StringUtil.ConvertXML(dr["购买日期"].ToString());

if (!ValidateUtil.IsDate(strBuyDate))
{
JScript.Alert("["+strAssetsNo+"]购买日期请输入正确格式!");
return "";
}

if(dr["用途"].ToString() == "")
{
JScript.Alert("["+strAssetsNo+"]用途不能为空!");
return "";
}
if(dr["资产来源"].ToString() == "")
{
JScript.Alert("["+strAssetsNo+"]资产来源不能为空!");
return "";
}

strParaXml += "<astbasem austaff='" + this.g_StaffNo + "' ";
strParaXml += " assetsno='" + strAssetsNo + "' ";
strParaXml += " assetsname='" + StringUtil.ConvertXML(dr["资产名称"].ToString()) + "' ";
strParaXml += " catalogname='" + StringUtil.ConvertXML(dr["类别"].ToString()) + "' ";
strParaXml += " sourcename='" + StringUtil.ConvertXML(dr["资产来源"].ToString()) + "' ";
strParaXml += " spec='" + StringUtil.ConvertXML(dr["型号/配置"].ToString()) + "' ";
strParaXml += " usememo='" + StringUtil.ConvertXML(dr["用途"].ToString()) + "' ";
strParaXml += " deptname='" + StringUtil.ConvertXML(dr["使用部门"].ToString()) + "' ";

strParaXml += " placename='" + StringUtil.ConvertXML(dr["存放位置"].ToString()) + "' ";
strParaXml += " staffname='" + StringUtil.ConvertXML(dr["使用人"].ToString()) + "' ";
strParaXml += " buydate='" + strBuyDate + "' ";

strParaXml += " usemonth='" + strUseMonth + "' ";
strParaXml += " keepmonth='" + strKeepMonth + "' ";
strParaXml += " usedate='" + strUseDate + "' ";
strParaXml += " ifuse='" + StringUtil.ConvertXML(dr["使用情况"].ToString()) + "' ";
strParaXml += " buyprice='" + strBuyPrice + "' ";
strParaXml += " surprate='" + strSurpRate + "' ";
strParaXml += " surplus='" + strSurplus + "' ";
strParaXml += " totaldepr='" + strTotalDepr + "' ";
strParaXml += " iffix='" + StringUtil.ConvertXML(dr["是否安装"].ToString()) + "' ";

strParaXml += " memo='" + StringUtil.ConvertXML(dr["备注"].ToString()) + "' ";
strParaXml += " ></astbasem>";
i++;
}
}
}
catch(System.Exception ex)
{
JScript.Alert(ex.Message);
return "";
}
if(i == 0)
{
JScript.Alert("工作表[固定资产明细表]中没有数据,请检查!");
return "";
}
strParaXml = "<root>"+strParaXml+"</root>";

return strParaXml;
}

#endregion

#region 读取Excel返回DataSet
private DataSet ReadExcel(string strPath,string strTableName)
{
//Sheet1$
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+ strPath +"';Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";

OleDbConnection cnnxls = new OleDbConnection (mystring);

OleDbDataAdapter myDa =new OleDbDataAdapter("select * from ["+strTableName+"]",cnnxls);

DataSet myDs =new DataSet();

try
{
myDa.Fill(myDs);
}
catch(System.Exception ex)
{
JScript.Alert(ex.Message);
return null;
}
return myDs;
}
#endregion
YnSky 2010-05-19
  • 打赏
  • 举报
回复
先上传到服务器,然后在导入!!!!!!!
dlut_qimingxing 2010-05-19
  • 打赏
  • 举报
回复
等待高手
kurorolove 2010-05-19
  • 打赏
  • 举报
回复
这个貌似有点难啊,帮顶下,期待高手出现
zhoulingsmile 2010-05-19
  • 打赏
  • 举报
回复
路过。。。帮你顶哈。。。
dlut_qimingxing 2010-05-19
  • 打赏
  • 举报
回复
高手帮忙啊。问题很急,解决不了啊。
takako_mu 2010-05-19
  • 打赏
  • 举报
回复
Mark.
dlut_qimingxing 2010-05-19
  • 打赏
  • 举报
回复
Application excel = new Microsoft.Office.Interop.Excel.Application(); //引用Excel对象
Workbook book = excel.Application.Workbooks.Add(Missing.Value);
这个,但是怎么用呢?
第二,我现在可以通过this.FileUpload1.PostedFile.InputStream获得上传的文件流,如何用excel打开这个文件流呢?
wxhysoftsodc 2010-05-19
  • 打赏
  • 举报
回复
不能上传文件到服务器端。捕获上传文件流
-----这个有些麻烦啊。帮你顶顶帖了。
骑猪看海 2010-05-19
  • 打赏
  • 举报
回复
使用Microsoft.Office.Interop.Excel组件
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 dlut_qimingxing 的回复:]
高手,你这服务器端的程序可以随便读客户端的excel?

安全如何保证,身份如何识别,这很多很多的问题啊。
你这根本就是服务器端的路径么。。。
汗了。。。

引用 17 楼 wang2129929 的回复:
你能看懂不。。
代码都这么明显了
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"……
[/Quote]
我不是高手。 我开始没看懂。 我后来已经补充了, 在24楼
加载更多回复(11)

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧