`
rmh1985
  • 浏览: 15357 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

最近整理了个js,解决了excel导入读取数据遇到的种种问题

 
阅读更多

做项目需要导入excel文件,导入的时候总会用到公式,宏等导致的导入数据失败

所以就想,能不能让用户把excel文档中的内容全选,然后粘贴到网页上用form提交,所以写了如下js

对第一个input单元格,获得焦点后点击ctrl+V,就会将excel文档复制到网页上

<html>

	<head>
		<script type="text/javascript" src="/jquery/jquery-1.4.2.min.js"></script>
	</head>
	<body>
		<table id="drsj">
			<tr>
				<td>
					<input type="text" name="XM" />
				</td>
				<td>
					<input type="text" name="NSR_MC" />
				</td>
				<td>
					<input type="text" name="SFZZLX" />
				</td>
				<td>
					<input type="text" name="SFZZHM" />
				</td>
				<td>
					<input type="text" name="GJ" />
				</td>
				<td>
					<input type="text" name="SKSSQ" />
				</td>
				<td>
					<input type="text" name="SDXM" />
				</td>
				<td>
					<input type="text" name="SRE" />
				</td>
				<td>
					<input type="text" name="MSSRE" />
				</td>
				<td>
					<input type="text" name="YXKCSE" />
				</td>
				<td>
					<input type="text" name="FYKCBZ" />
				</td>
				<td>
					<input type="text" name="ZYKCJZE" />
				</td>
				<td>
					<input type="text" name="SNSDSE" />
				</td>
				<td>
					<input type="text" name="SL" />
				</td>
				<td>
					<input type="text" name="SSKCS" />
				</td>
				<td>
					<input type="text" name="YKSE" />
				</td>
				<td>
					<input type="text" name="YJSE" />
				</td>
				<td>
					<input type="text" name="BZ" />
				</td>
			</tr>
		</table>
		<div id="ztmb" style="display: none;">

			<table>
				<tr>
					<td>
						<input type="text" name="XM" />
					</td>
					<td>
						<input type="text" name="NSR_MC" />
					</td>
					<td>
						<input type="text" name="SFZZLX" />
					</td>
					<td>
						<input type="text" name="SFZZHM" />
					</td>
					<td>
						<input type="text" name="GJ" />
					</td>
					<td>
						<input type="text" name="SKSSQ" />
					</td>
					<td>
						<input type="text" name="SDXM" />
					</td>
					<td>
						<input type="text" name="SRE" />
					</td>
					<td>
						<input type="text" name="MSSRE" />
					</td>
					<td>
						<input type="text" name="YXKCSE" />
					</td>
					<td>
						<input type="text" name="FYKCBZ" />
					</td>
					<td>
						<input type="text" name="ZYKCJZE" />
					</td>
					<td>
						<input type="text" name="SNSDSE" />
					</td>
					<td>
						<input type="text" name="SL" />
					</td>
					<td>
						<input type="text" name="SSKCS" />
					</td>
					<td>
						<input type="text" name="YKSE" />
					</td>
					<td>
						<input type="text" name="YJSE" />
					</td>
					<td>
						<input type="text" name="BZ" />
					</td>
				</tr>
			</table>
		</div>
	</body>
	<script type="text/javascript">  
    //借助js操作剪切板内容,完成Excel多单元格数据 到 Html table对应单元格的复制
    //为每个text控件定义“获得输入焦点”和“失去焦点”时的样式   
    $("input[type='text']").focus(function(){   
             $(this).css({"background-color":"#FFFFE0"});    
        }).blur(function(){   
             $(this).css({"background-color":"white"});   
        });   
    //jquery中未对onpaste事件(即粘贴事件)进行封装,只好采用js原有的方式为每个text控件绑定onpaste事件   
    $.each($("input[type='text']"),function(obj,index){  
         this.onpaste = readClipboardData;   
      });   
      //获取剪切板数据 函数   
    function getClipboard() {   
        if (window.clipboardData) {   
            return (window.clipboardData.getData('Text'));   
        }   
        else if (window.netscape) {   
            netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');   
            var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);   
            if (!clip) return;   
            var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);   
            if (!trans) return;   
            trans.addDataFlavor('text/unicode');   
            clip.getData(trans, clip.kGlobalClipboard);   
            var str = new Object();   
            var len = new Object();   
            try {   
                trans.getTransferData('text/unicode', str, len);   
            }   
            catch (error) {   
                return null;   
            }   
            if (str) {   
                if (Components.interfaces.nsISupportsWString) strstr = str.value.QueryInterface(Components.interfaces.nsISupportsWString);   
                else if (Components.interfaces.nsISupportsString) strstr = str.value.QueryInterface(Components.interfaces.nsISupportsString);   
                else str = null;   
            }   
            if (str) {   
                return (str.data.substring(0, len.value / 2));   
            }   
        }   
        return null;   
    }   
    //读取剪切板数据,并将剪切板数据存放于各table cell中   
    function readClipboardData() {
        var str = getClipboard(); //获取剪切板数据   
        var len = str.split("\n");//获取行数   
        //var tdIndex = $(this).parent().index(); //获取当前text控件的父元素td的索引   
        //var trIndex = $(this).parent().parent().index(); //获取当前text控件的父元素的父元素tr的索引   
        var trStr;   
   		//从excle表格中复制的数据,最后一行为空行,因此无需对len数组中最后的元素进行处理 
   		if(len!=null&&len.length>1){
   			var newTr;
   			var dqLenth=$("#drsj").find("tr").length;
   			for(var i=0;i<len.length-dqLenth-1;i++){
   				newTr=document.getElementById("drsj").insertRow($("#drsj").find("tr").length);
   				var mxTr=$("#ztmb").find("tr").html();
				$(newTr).html(mxTr);
   			}
   			dqLenth=$("#drsj").find("tr").length;
   			var detailTable=document.getElementById("drsj");
   			for(var i=dqLenth;i>len.length-2;i--){
   				try{
   				detailTable.deleteRow(i);
   				}catch(e){}
   			}
   			for(var i=0;i<len.length-1;i++){
	           //excel表格同一行的多个cell是以空格 分割的,此处以空格为单位对字符串做 拆分操作。。   
	           trStr = len[i].split(/\s+/); 
	           if(trStr.length!=18){
	           	//	alert("内容行中,第"+(i+1)+"行数据错误,单元格中不能存在空数据,如为空请填充0");
	           }   
	            for(var j=0;j<=trStr.length-1;j++){ //将excel中的一行数据存放在table中的一行cell中   
	                $("tr:eq("+i+")").children("td:eq("+(j)+")").children().val(trStr[j]);   
	            }   
	        } 
        }
      return false; //防止onpaste事件起泡   
    }   
  </script>
</html>
分享到:
评论

相关推荐

    从Excel中读取数据导入到数据库中

    总的来说,从Excel中读取数据并导入到数据库是一个涉及数据预处理、类型转换、错误处理等多个环节的过程。正确处理合并单元格和长文本问题,能确保数据导入的准确性和效率,从而更好地支持后续的数据分析和应用。

    java读取excel数据导入数据库源码

    java读取excel数据导入数据库源码 java读取excel数据导入数据库源码

    js前端Excel大数据处理导入

    在JavaScript(JS)前端开发中,处理Excel大数据的导入是一项挑战。随着Web应用程序对数据处理能力的需求提升,前端工程师必须找到有效地处理大量数据的方法,而不仅仅是依赖后端服务器。本主题将深入探讨如何使用...

    matlabGUI读取Excel数据,matlabgui怎么导入excel数据,matlab

    这里的`filename`是包含Excel数据的文件路径,`num`是一个矩阵,包含了读取到的数值数据,`text`包含了文本数据,而`raw`是一个包含所有数据(包括格式信息)的结构数组。通常,我们主要关心`num`,因为它包含了大...

    layui-excel数据导入demo-源码-导入即用

    layui-excel数据导入功能的核心在于,它提供了一种便捷的方式,允许用户直接通过Excel文件导入数据到前端表格中。这一特性极大地简化了数据输入和管理流程,尤其适用于需要大量数据录入的场景。以下我们将详细介绍这...

    C#读取导入Excel值为空解决方法

    本文将详细介绍如何解决在C#中读取导入的Excel文件时某些值为空的问题。 #### 问题背景 当我们在C#中尝试读取Excel文件时,有时会发现虽然Excel文件中的某些单元格看起来是空的(即没有输入任何数据),但在C#读取...

    Delphi中从Excel导入数据的通用方法

    在Delphi编程环境中,从Excel导入数据是一项常见的需求,尤其在数据分析、报表处理或数据库集成等场景下。本文将详细探讨如何实现这个功能,并提供一个通用的方法。 首先,要完成这个任务,我们需要一个能与Excel...

    C# excel导入出错解决办法

    Excel数据导入分为以下四个步骤:(1)在本机上按照数据导入模板的要求,将需要导入的数据整理到Excel文件中,保存为.xls文件;(2)通过FileUpload上传控件将.xls文件上传到服务器上;(3)使用OleDB(Object ...

    Spring框架实现Excel批量导入数据

    以上就是使用Spring框架实现Excel批量导入数据的基本步骤。通过这种方式,可以极大地提高数据录入的效率,降低手动操作的工作量,尤其适用于需要频繁处理大量数据的业务场景。在实际项目中,可以根据具体需求进行...

    C#中读取excel文件中数据并导入dataGridView添加读取ProgressBar进度及当前读取条目挨个

    在本场景中,我们关注的重点是如何在读取Excel文件数据并将其导入到dataGridView时,同时展示一个进度条(progressbar)和当前正在读取的条目信息。这将提升用户体验,让用户了解后台操作的状态。 首先,我们需要...

    前端js解析/读取excel文件

    本文将深入探讨如何使用JavaScript在浏览器端解析和读取Excel文件,主要基于开源库`js-xlsx`。 `js-xlsx`是一个强大的JavaScript库,专门用于解析和操作Excel文件(.xlsx和.xls格式)。它支持读取二进制文件、Base...

    C# 导入Excel读取图片上传

    在C#编程环境中,导入Excel并读取其中的图片上传是一项常见的任务,特别是在处理数据导入、数据分析或报表生成等场景。下面将详细讲解如何利用C#实现这一功能,包括使用.NET框架提供的组件以及第三方库。 首先,...

    js读取本地excel文档数据

    ### JS读取本地Excel文档数据知识点详解 #### 一、背景与需求分析 在Web开发中,经常需要处理用户上传的文件,特别是Excel文件。这些文件通常包含了重要的数据信息,如表格数据等。通过JavaScript(JS)来读取并...

    matlab导入excel数据教程

    除了使用 xlsread 命令外,Matlab 还提供了一个导入数据的功能,可以通过菜单 "文件"-"导入数据" 来访问该功能。下面是使用该功能的步骤: * 在 Matlab 中,选择 "文件"-"导入数据" 菜单项。 * 在 "导入数据" ...

    C#将数据导入excel和Excel数据导入数据库

    这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用多种库来实现这一功能,如NPOI、EPPlus或Microsoft.Office.Interop.Excel。NPOI...

    Java 使用poi导入excel 并使用xml做数据验证

    导入数据的过程中,首先需要创建一个`Workbook`对象来代表Excel文件,然后通过`Sheet`对象来操作单个工作表,接着是`Row`和`Cell`对象来处理每一行和每一列的数据。使用POI读取Excel数据的基本步骤如下: 1. 加载...

    读取Excel文件将数据存入map集合

    本篇文章介绍了一个方法,该方法能够读取Excel文件并将其中的数据存储到Java中的`Map`集合里,便于后续进行数据分析或处理。 #### 方法概述 方法签名如下: ```java public Map, Map, String&gt;&gt; importReportExcel...

    Excel大量数据快速导入数据库源码

    4. **数据映射**:在导入数据时,可能需要将Excel列与数据库表的字段进行映射,`Frm_SetColumns.cs`可能实现了这一功能,允许用户选择或指定Excel列对应数据库的哪个字段。 5. **SQL批量插入**:`Winform_...

    easyexcel+validation excel导入导出下载

    5. **数据校验**:Validation是Java中用于数据验证的框架,如使用JSR-303/JSR-349(Bean Validation)标准,我们可以为实体类的属性添加校验注解,如@NotNull、@Size、@Pattern等,然后在导入数据时,通过Validator...

    c#实现从Excel导入数据到textbox中

    总的来说,C#实现从Excel导入数据到TextBox,主要通过使用Excel Interop库来操作Excel文件,然后将读取到的数据直接写入TextBox。根据实际需求,你还可以进行相应的优化和扩展,以满足不同的业务场景。

Global site tag (gtag.js) - Google Analytics