温故而知新

.net相关

导航

JS读取本地excel文件

 

<script>
function ReadExcel()
{
     var tempStr = "";
     var filePath= document.all.upfile.value;
     var oXL = new ActiveXObject("Excel.application");
     var oWB = oXL.Workbooks.open(filePath);
     oWB.worksheets(1).select();
     var oSheet = oWB.ActiveSheet;
     try{
      for(var i=2;i<46;i++)
      {
       if(oSheet.Cells(i,2).value =="null" || oSheet.Cells(i,3).value =="null" )
        break;
       var a = oSheet.Cells(i,2).value.toString()=="undefined"?"":oSheet.Cells(i,2).value;
       tempStr+=("  "+oSheet.Cells(i,2).value+
        "  "+oSheet.Cells(i,3).value+
        "  "+oSheet.Cells(i,4).value+
        "  "+oSheet.Cells(i,5).value+
        "  "+oSheet.Cells(i,6).value+"\n");
      }
     }catch(e)
     {
          document.all.txtArea.value = tempStr;
     }
     document.all.txtArea.value = tempStr;
     oXL.Quit();
     CollectGarbage();
}
</script>
<html>
<input type="file" id="upfile" /><input type="button" onclick="ReadExcel();" value="read">
<br>
<textarea id="txtArea" cols=50 rows=10></textarea>
</html>
 
 
 
 
 
 
 
 
 
 
 
二、

js读取excel文件

<script>
function readThis(){
var tempStr = "";
var filePath= document.all.upfile.value;
var oXL = new ActiveXObject("Excel.application");
var oWB = oXL.Workbooks.open(filePath);
oWB.worksheets(1).select();
var oSheet = oWB.ActiveSheet;
try{
for(var i=2;i<46;i++){
if(oSheet.Cells(i,2).value =="null" || oSheet.Cells(i,3).value =="null" )
break;
var a = oSheet.Cells(i,2).value.toString()=="undefined"?"":oSheet.Cells(i,2).value;
tempStr+=(" "+oSheet.Cells(i,2).value+" "+oSheet.Cells(i,3).value+" "+oSheet.Cells(i,4).value+" "+oSheet.Cells(i,5).value+" "+oSheet.Cells(i,6).value+"\n");
}
}

catch(e){
//alert(e);
document.all.txtArea.value = tempStr;
}

document.all.txtArea.value = tempStr; oXL.Quit();
CollectGarbage();
}
</script>

<html>
<input type="file" id="upfile" />
<input type="button" onclick="readThis();" value="读取"><br>
<textarea id="txtArea" cols=50 rows=10></textarea>
</html>
 
 
 
 
 
 
 
 
 
 
 
 
 
三、
我在vs2005平台上要实现这么一个功能,点击一个按钮一次将大量的excel文件数据导入到sqlserver2005中
我用的是ajax技术,在前台用javascript操做excel文件,循环读取所有的excel文件,每读取一行就放进一个数组里通过web服务传到后台用c#语言将一行数据插入到数据库。思路大概就是这样。
      现在功能已经实现了,具体代码如下
用javascript定义一个函数,循环读取excel文件数据
function   readExcel()
          {  
             
              try
              {      
                       
                        var   ExcelNum=new   Array();
                            //重复导入之前,删除上次导入的同期数据
                  WebServiceExcel.deleteOldNumber();
                                var   oXL   =   new   ActiveXObject( "Excel.Application ");
                              \\r_c_num[5]的值为excel文件的名字
                                var   path=document.all.excelpath.value+ "\\ "+r_c_num[5]
                          var   oWB   =   oXL.Workbooks.open(path);
                                  \\如果excel文件有多个sheet的话从第一个sheet循环读取
                          for(var   x=1;x <=oWB.worksheets.count;x++)
                          {
                                  oWB.worksheets(x).select();
                                  var   oSheet   =oWB.ActiveSheet;
                                      \\按指定开始行和开始列读取excel文件的数据
                                  for(var   i=parseInt(r_c_num[6]);i <=parseInt(r_c_num[7]);i++)
                                  {
                                          for(var   j=parseInt(r_c_num[8]);j <=parseInt(r_c_num[9]);j++)
                                          {
                                                  if(typeof(oSheet.Cells(i,j).value)== "undefined ")
                                                  {
                                                          ExcelNum[j-parseInt(r_c_num[8])+6]= " ";
                                                  }
                                                  else
                                                  {
                                                          switch_letter(j);
                                                          ExcelNum[j-parseInt(r_c_num[8])+6]=oSheet.Cells(i,j).value;
                                                  }
                                          }
                                                  //将读取的一行数据传到后台插入到数据库
                                          WebServiceExcel.insert_From_Excel(ExcelNum);
                                  }
                          }
                        }
}
catch(err)
{
        alert( "出错了, "+err.message);
}
}
这只是前台的关键代码。
现在的问题是,如果excel文件数据太多的话,导入过程要等好长时间,性能太差了,不知道该怎么改进???如果导几千行数据就不行了,时间让我无法忍受。请高手赐教,很着急用,谢谢了!!!
 
 
 
 
 
 
 
 
 
 
 
 
一个用JavaScript结合Excel.Application读取本地excel文件并以表格呈现的简单例子
2008年04月17日 星期四 10:59

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var excelFileName = "E:/project/eomstools/ShowTaskCodeWorkbook/test.xls";
var oWB;

function showExcel(targetDIVID){
//objID为表格ID
//需要在浏览器安全级别设置中启用ActiveX
// Start Excel and get Application object.
    var oXL=null;
    try{
        oXL = new ActiveXObject("Excel.Application");
    }catch(e){
        alert(e.message);
        return ;
    }
            if (oXL == null){
     alert("创建Excel文件失败,可能是您的计算机上没有正确安装Microsoft Office Excel软件或浏览器的安全级别设置过高!");
     return;
    }
try{
   // Get a new workbook.
   oWB = oXL.Workbooks.Open(excelFileName);
   for (i = 1; i <= oWB.Sheets.Count; i++){
    if (oWB.Sheets(i).name.lastIndexOf("月") != -1){
     showSheet(i);
    }
   }
}
catch (e){
        alert(e.message);
}
oWB.Close();   //不close工作簿的话,后果还是挺严重的。
oWB = null;
oXL = null;
}

function showSheet(sheetNO){
var oSheet = oWB.Sheets(sheetNO);
document.write("<table border=1>");
for (i = 1; i < oSheet.UsedRange.Rows.Count; i++){
   document.write("<tr>");
   for (j = 1; j < oSheet.UsedRange.Columns.Count; j++){
    value = oSheet.Cells(i, j).Value;
    if (value == undefined){
     value = "&nbsp;";
    }
    document.write(i == 1 ? "<th nowrap=true><b>" : "<td>");
    document.write(value);
    document.write(i == 1 ? "</b></th>" : "</td>");
   }
   document.write("</tr>");
}
document.write("</table>");
oSheet = null;
}
//-->
</SCRIPT>
</HEAD>

<BODY onLoad="showExcel();">

</BODY>
</HTML>

 
 
 
 
 
 
 

用JS讀取excel的例子

<%
''
'*********************************************************
 ' 目的:讀取excel資料後插入到數據庫中同時紀錄成功和失敗的數目
 ' 傳入:   
 ' 返回:
 '*********************************************************
Function GetExcel()
 Dim conn
 Dim StrConn
 Dim rs
 Dim Sql
 file=""
 Set conn=Server.CreateObject("ADODB.Connection")
 StrConn="Driver={Microsoft Excel Driver (*.xls)};DBQ="& Server.MapPath("EXCEL_DATA.xls")
 ''StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dd.xls;Extended Properties=Excel 8.0"
 conn.Open StrConn
 Set rs = Server.CreateObject("ADODB.Recordset")
 Sql="select * from [Sheet1$]"
 rs.Open Sql,conn,2,2
 ''讀取excel中的字段名稱,並檢察字段順序是否正確
 for i=0 to rs.Fields.Count-1
   FILE_HEAD=FILE_HEAD&rs(i).Name
 next
 ''response.write FILE_HEAD
 IF trim(FILE_HEAD)<>"版本使用單位類綱目節類說明綱說明目說明檔名保存年限共同分類號" THEN
  RESPONSE.WRITE "<SCRIPT LANGUAGE='JAVASCRIPT'>alert('EXCEL文件字段順序錯誤或字段數不對!!')</SCRIPT>"
  exit Function
  END IF
 ''讀取excel中的資料
 do while Not rs.EOF
  ''將讀取的資料INSERT到oracle數據庫
  for i=0 to rs.Fields.Count-1
   EDITION=rs(0)
   FILE_CODE=rs(2)+rs(3)+rs(4)+rs(5)
   FILE_NAME=rs(9)
   KIND1_DESC=rs(6)
   KIND2_DESC=rs(7)
   KIND3_DESC=rs(8)
   KIND4_DESC=rs(9)
   SAVE_YEAR=rs(10)
   FILE_UNIT=rs(1)
   COM_FILE_CODE=rs(11)
   ''==============================================
     CHECED_SQL="Select nvl(FILE_CASE,'') FILE_CASE FROM ODM67 where EDITION='"&TRIM(EDITION)&"' and FILE_CODE='"&TRIM(FILE_CODE)&"' "
     If mobjDB.OpenSQL(CHECED_SQL) Then
        If mobjDB.IsEmpty Then
          FILE_CASE="0001"
          CASE_DESC="總案"
          INS_SQL=""
          INS_SQL=INS_SQL & " INSERT INTO ODM67(" & VBCRLF
          INS_SQL=INS_SQL & "     EDITION,FILE_CODE,FILE_CASE," & VBCRLF
          INS_SQL=INS_SQL & "     CASE_DESC,CRT_USER,CRT_DATE," & VBCRLF
          INS_SQL=INS_SQL & "     CRT_TIME,MDF_USER,MDF_DATE,MDF_TIME)" & VBCRLF
          INS_SQL=INS_SQL & "   VALUES(" & VBCRLF
          INS_SQL=INS_SQL & "     '"&TRIM(EDITION)&"','"&TRIM(FILE_CODE)&"'," & VBCRLF
          INS_SQL=INS_SQL & "     '"&TRIM(FILE_CASE)&"','"&TRIM(CASE_DESC)&"'," & VBCRLF
          INS_SQL=INS_SQL & "     '"&TRIM(SESSION("USER_ID"))&"','"&TRIM(TODAY)&"'," & VBCRLF
          INS_SQL=INS_SQL & "     '"&TRIM(NOWTIME)&"','"&TRIM(SESSION("USER_ID"))&"'," & VBCRLF
          INS_SQL=INS_SQL & "     '"&TRIM(TODAY)&"','"&TRIM(NOWTIME)&"')"
          CALL mobjDB.ExecSQL(INS_SQL)
        End If
       End If
   ''==============================================
   INS_SQL=""
    INS_SQL=INS_SQL & " INSERT INTO ODM61( " & VBCRLF
    INS_SQL=INS_SQL & "       EDITION,FILE_CODE,FILE_NAME,KIND1_DESC," & VBCRLF
    INS_SQL=INS_SQL & "       KIND2_DESC,KIND3_DESC,KIND4_DESC,SAVE_YEAR," & VBCRLF
    INS_SQL=INS_SQL & "       FILE_UNIT,COM_FILE_CODE,CRT_USER,CRT_DATE," & VBCRLF
    INS_SQL=INS_SQL & "       CRT_TIME,MDF_USER,MDF_DATE,MDF_TIME)" & VBCRLF
    INS_SQL=INS_SQL & "     VALUES(" & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(EDITION)&"','"&TRIM(FILE_CODE)&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(FILE_NAME)&"','"&TRIM(KIND1_DESC)&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(KIND2_DESC)&"','"&TRIM(KIND3_DESC)&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(KIND4_DESC)&"','"&TRIM(SAVE_YEAR)&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(FILE_UNIT)&"','"&TRIM(COM_FILE_CODE)&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(SESSION("USER_ID"))&"','"&TRIM(TODAY)&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(NOWTIME)&"','"&TRIM(SESSION("USER_ID"))&"'," & VBCRLF
    INS_SQL=INS_SQL & "       '"&TRIM(TODAY)&"','"&TRIM(NOWTIME)&"')"
    ''RESPONSE.WRITE INS_SQL& "<BR>"
    IF mobjDB.ExecSQL(INS_SQL) THEN
     InCount=InCount+1
    ELSE
     NoCount=NoCount+1
     file=file&TODAY&"  "&NOWTIME&"   "&EDITION&"   "&FILE_CODE & VBCRLF
     END IF
    exit for
  next
 rs.MoveNext
 Loop
 rs.close
 set rs=nothing
 Conn.close
 set StrConn=nothing
 if file<>"" then
  CALL CreateFolder()
  call SetFile(file)
  strpath=server.mappath("EXCEL_DATA.xls")
  call DeleteFolder(strpath)
  file=""
 end if
 
End Function
 '*********************************************************
 ' 目的:    新建一個指定的文件,如果存在就不新建,並向文件追加紀錄
 ' 傳入:    file:要追加的數據
 ' 返回:  
 '*********************************************************
Function SetFile(file)
 file_path="C:\LOG\OD60err.log"
 set fstemp=server.CreateObject("Scripting.FileSystemObject")
 IF (fstemp.FileExists(file_path)) THEN
 ELSE
  set filetemp=fstemp.CreateTextFile(file_path,true)
  filetemp.writeLine "紀錄匯入失敗資料"
  filetemp.close
  END IF
 ''追加失敗資料信息OpenTextFile
 set filetemp=fstemp.OpenTextFile(file_path,8,true)
 filetemp.writeLine file
 filetemp.close
 set filetemp=Nothing
 set fstemp=Nothing
End Function
'*********************************************************
 ' 目的:    新建一個指定的文件夾,如果存在就不新建
 ' 傳入:  
 ' 返回:  
 '*********************************************************
Function CreateFolder()
  Dim fso, f
  folder="c:\LOG"
  Set fso = CreateObject("Scripting.FileSystemObject")
  IF fso.FolderExists(folder) THEN
  ELSE
   Set f = fso.CreateFolder(folder)
    CreateFolderDemo = f.Path
  END IF
End Function
'*********************************************************
 ' 目的:刪除上傳的文件,
 ' 傳入:傳入上傳文件的虛擬路徑  
 ' 返回:  
 '*********************************************************
Function DeleteFolder(filepath)
 Dim fso, f
  folder="EXCEL_DATA.xls"
  Set fso = CreateObject("Scripting.FileSystemObject")
  ''response.write fso.FileExists(filepath)
  IF fso.FileExists(filepath) THEN
   fso.DeleteFile filepath
  END IF
End Function
%>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<script>
 2function readThis(){
 3 var tempStr = "";
 4 var filePath= document.all.upfile.value;
 5 var oXL = new ActiveXObject("Excel.application"); 
 6 var oWB = oXL.Workbooks.open(filePath);
 7 oWB.worksheets(1).select(); 
 8 var oSheet = oWB.ActiveSheet;
 9 try{
10  for(var i=2;i<46;i++){
11   if(oSheet.Cells(i,2).value =="null" || oSheet.Cells(i,3).value =="null" )
12    break;
13   var a = oSheet.Cells(i,2).value.toString()=="undefined"?"":oSheet.Cells(i,2).value;
14   tempStr+=("  "+oSheet.Cells(i,2).value+
15    "  "+oSheet.Cells(i,3).value+
16    "  "+oSheet.Cells(i,4).value+
17    "  "+oSheet.Cells(i,5).value+
18    "  "+oSheet.Cells(i,6).value+"\n");
19  }

20 }
catch(e){
21  //alert(e);
22  document.all.txtArea.value = tempStr;
23 }
 
24 document.all.txtArea.value = tempStr;
25 oXL.Quit();
26 CollectGarbage();
27
28}

29
30</script>
31<html>
32<input type="file" id="upfile" /><input type="button" onclick="readThis();" value="读取">
33<br>
34<textarea id="txtArea" cols=50 rows=10></textarea>
35</html>

36

posted on 2009-03-31 16:31  业余程序猿  阅读(35309)  评论(0)    收藏  举报