请教高手:如何在客户端用js + c# 将客户机上的excel导入服务器sqlserver? excel存在于客户机上,因为有可能存在并发操作,暂不考虑将excel先上传至服务器再进行数据导入,我的想法是在客户端先用js读取excel文件里的内容,再结果 c#将html里的内容写入数据库,请高手指教,最好是有代码示例.分不够再加,在线等. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 using System;using System.Data;using System.Diagnostics;using System.Reflection;namespace RC.MSOffice{ /// <summary> /// Excel相关 /// </summary> public class ExcelUtility { /// <summary> /// 导出Excel /// </summary> /// <param name="dataSet">需要导出Excel的DataSet</param> /// <param name="fileName">导出的路径</param> public static void ExportToExcel(DataSet dataSet, string fileName) { if (dataSet.Tables.Count == 0) { throw new Exception("DataSet中没有任何可导出的表。"); } Microsoft.Office.Interop.Excel.Application excelApplication = new Microsoft.Office.Interop.Excel.Application(); excelApplication.DisplayAlerts = false; Microsoft.Office.Interop.Excel.Workbook workbook = excelApplication.Workbooks.Add(Missing.Value); foreach (DataTable dt in dataSet.Tables) { Microsoft.Office.Interop.Excel.Worksheet lastWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(workbook.Worksheets.Count); Microsoft.Office.Interop.Excel.Worksheet newSheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, lastWorksheet, Type.Missing, Type.Missing); newSheet.Name = dt.TableName; for (int col = 0; col < dt.Columns.Count; col++) { newSheet.Cells[1, col + 1] = dt.Columns[col].ColumnName; } for (int row = 0; row < dt.Rows.Count; row++) { for (int col = 0; col < dt.Columns.Count; col++) { newSheet.Cells[row + 2, col + 1] = dt.Rows[row][col].ToString(); } } } ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete(); ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete(); ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete(); ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Activate(); try { workbook.Close(true, fileName, System.Reflection.Missing.Value); } catch (Exception e) { throw e; } excelApplication.Quit(); KillExcel(); } private static void KillExcel() { Process[] excelProcesses = Process.GetProcessesByName("EXCEL"); DateTime startTime = new DateTime(); int processId = 0; for (int i = 0; i < excelProcesses.Length; i++) { if (startTime < excelProcesses[i].StartTime) { startTime = excelProcesses[i].StartTime; processId = i; } } if (excelProcesses[processId].HasExited == false) { excelProcesses[processId].Kill(); } } }} js 不能操作客户端的文件,除非用activex 1、js读取excel内容参考:http://www.cnblogs.com/freeliver54/archive/2006/04/11/372646.html2、将excel内容里的字段,序列化成json数据格式(或者xml数据格式,推荐json)使用开源的解析器来序列化:参考:http://www.dreamdu.com/blog/2008/10/19/json_in_javascript/自己写代码来序列化:比如:可以使用jquery的serializeArray()方法3、将json数据格式传入asp.net处理页面,封装成一个实体对象C#下使用Json.NET,1.3版本支持framework2.0,3.0版本支持framework3.54、调用你的数据保存方法,将实体对象存入数据库 public static DataSet getExcelData(string fileurl,string sheetname) { try { //创建一个数据链接 string strCon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + fileurl + ";Extended Properties='Excel 8.0; HDR=No; IMEX=1'"; // string strCon = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ‘" + fileurl + "’;Extended Properties='Excel 8.0;IMEX=1;'"; string strSql = "SELECT * FROM ["+sheetname+"$]"; odconn = new OleDbConnection(strCon); odconn.Open(); //打开数据链接,得到一个数据集 odapt = new OleDbDataAdapter(strSql,odconn); //创建一个 DataSet对象 ds = new DataSet(); //得到自己的DataSet对象 odapt.Fill(ds,"datatable"); //关闭此数据链接 odapt.Dispose(); odconn.Dispose(); return ds; } catch(Exception e) { string s = e.Message; try { if(ds != null) { ds.Clear(); } } catch { return null; } try { if(odapt != null) { odapt.Dispose(); } } catch { return null; } try { if(odconn != null) { odconn.Close(); odconn.Dispose(); } } catch { return null; } return null; } }得到Excel中的数据,我之前没有导入进去,就insert 一条条数据插进去的。。 要读是可以,用js调用excel对象,但一般是没有客户端权限的,还是建议先上传. 当然也可以写一个脚本给用户下载,修改注册表权限,安装activex控件 js操作Excel比较麻烦,需要生成json数据,还要考虑权限;在不是非常必要的情况下,建议楼主上传到服务器,然后通过程序来导入; repeater怎么分页,急!急!急! cookies 如何存取主键 DataTable 取值 JS中控件取值时写 <%=%> 出错的问题,高手请指教 一个菜鸟的长时间疑问!!! 急,UltraWebGrid问题 ? 关于ASP.net页面中歌曲与歌词同步显示问题 有问题要请教众兄弟!!!数据导出为excel成功后..... 请问怎样实现按钮的超级链接? 关于WEB.CONFIG的配制问题(在线等) 报辅导班的问题 如何在代码文件中对数据库进行操作?
using System.Data;
using System.Diagnostics;
using System.Reflection;namespace RC.MSOffice
{
/// <summary>
/// Excel相关
/// </summary>
public class ExcelUtility
{
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="dataSet">需要导出Excel的DataSet</param>
/// <param name="fileName">导出的路径</param>
public static void ExportToExcel(DataSet dataSet, string fileName)
{
if (dataSet.Tables.Count == 0)
{
throw new Exception("DataSet中没有任何可导出的表。");
} Microsoft.Office.Interop.Excel.Application excelApplication = new Microsoft.Office.Interop.Excel.Application();
excelApplication.DisplayAlerts = false; Microsoft.Office.Interop.Excel.Workbook workbook = excelApplication.Workbooks.Add(Missing.Value); foreach (DataTable dt in dataSet.Tables)
{
Microsoft.Office.Interop.Excel.Worksheet lastWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(workbook.Worksheets.Count);
Microsoft.Office.Interop.Excel.Worksheet newSheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, lastWorksheet, Type.Missing, Type.Missing); newSheet.Name = dt.TableName; for (int col = 0; col < dt.Columns.Count; col++)
{
newSheet.Cells[1, col + 1] = dt.Columns[col].ColumnName;
} for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
newSheet.Cells[row + 2, col + 1] = dt.Rows[row][col].ToString();
}
}
} ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Activate(); try
{
workbook.Close(true, fileName, System.Reflection.Missing.Value);
}
catch (Exception e)
{
throw e;
} excelApplication.Quit(); KillExcel();
} private static void KillExcel()
{
Process[] excelProcesses = Process.GetProcessesByName("EXCEL");
DateTime startTime = new DateTime(); int processId = 0;
for (int i = 0; i < excelProcesses.Length; i++)
{
if (startTime < excelProcesses[i].StartTime)
{
startTime = excelProcesses[i].StartTime;
processId = i;
}
} if (excelProcesses[processId].HasExited == false)
{
excelProcesses[processId].Kill();
}
}
}
}
参考:http://www.cnblogs.com/freeliver54/archive/2006/04/11/372646.html2、将excel内容里的字段,序列化成json数据格式(或者xml数据格式,推荐json)
使用开源的解析器来序列化:
参考:http://www.dreamdu.com/blog/2008/10/19/json_in_javascript/
自己写代码来序列化:
比如:可以使用jquery的serializeArray()方法3、将json数据格式传入asp.net处理页面,封装成一个实体对象
C#下使用Json.NET,1.3版本支持framework2.0,3.0版本支持framework3.54、调用你的数据保存方法,将实体对象存入数据库
{
try
{
//创建一个数据链接
string strCon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source="
+ fileurl + ";Extended Properties='Excel 8.0; HDR=No; IMEX=1'"; // string strCon = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ‘" + fileurl + "’;Extended Properties='Excel 8.0;IMEX=1;'";
string strSql = "SELECT * FROM ["+sheetname+"$]";
odconn = new OleDbConnection(strCon);
odconn.Open();
//打开数据链接,得到一个数据集
odapt = new OleDbDataAdapter(strSql,odconn);
//创建一个 DataSet对象
ds = new DataSet();
//得到自己的DataSet对象
odapt.Fill(ds,"datatable");
//关闭此数据链接
odapt.Dispose();
odconn.Dispose();
return ds;
}
catch(Exception e)
{
string s = e.Message;
try
{
if(ds != null)
{
ds.Clear();
}
}
catch
{
return null;
}
try
{
if(odapt != null)
{
odapt.Dispose();
}
}
catch
{
return null;
}
try
{
if(odconn != null)
{
odconn.Close();
odconn.Dispose();
}
}
catch
{
return null;
}
return null;
}
}
得到Excel中的数据,我之前没有导入进去,就insert 一条条数据插进去的。。
在不是非常必要的情况下,建议楼主上传到服务器,然后通过程序来导入;