精华内容
下载资源
问答
  • js 操作表格-修改单元格内容

    千次阅读 2019-11-08 10:58:30
    表格的修改 ... 为了避免连续点修改按钮,框内的值将变成input的源码,所以要加上判断单元格内容是不是数字 function update(){ var cell=document.getElementById("cell"); /*修改...
    表格的修改
    
    	将修改内容变成框(input标签),将原内容按照字符串拼接放在value里
    	失去焦点后,将框变成文本,并将文本内容变成框的value值
    	为了避免连续点修改按钮,框内的值将变成input的源码,所以要加上判断单元格的内容是不是数字
    	
    		function update(){
    			var cell=document.getElementById("cell");
    			/*修改单元格内容*/
    			//判断是否是数字,避免连续点击两次,单元格内容变成input标签源码
    			if(!isNaN(cell.innerHTML))
    			{cell.innerHTML="<input type='text' value='"+cell.innerHTML+"' onblur='updateRow2(this)'>"; /*字符串的拼接*/
    			}
    			
    		}
    		/*失去焦点*/
    		function updateRow2(inp){
    			var cell=document.getElementById("cell");
    			cell.innerHTML=inp.value;
    		}
    

    代码示例:

    <html>
    	<head>
    		<title>js 操作表格</title>
    		<meta charset="utf-8"/>
    		<script type="text/javascript">
    			function delRow(btn)
    			{
    				var ta=document.getElementById("ta");
    				var tr=btn.parentNode.parentNode;
    				ta.deleteRow(tr.rowIndex);
    			}
    			
    			/*修改*/
    			function update(){
    				var cell=document.getElementById("cell");
    				/*修改单元格内容*/
    				//判断是否是数字,避免连续点击两次,单元格内容变成input标签源码
    				if(!isNaN(cell.innerHTML))
    				{cell.innerHTML="<input type='text' value='"+cell.innerHTML+"' οnblur='updateRow2(this)'>"; /*字符串的拼接*/
    				}
    				
    			}
    			/*失去焦点*/
    			function updateRow2(inp){
    				var cell=document.getElementById("cell");
    				cell.innerHTML=inp.value;
    			}
    		</script>
    		<style type="text/css">
    			#ta{
    				margin:auto;
    			}
    			
    			#ta tr{
    				height:35px;
    
    			}
    			
    			
    		</style>
    	</head>
    	<body>
    		<hr />
    		<table border="1px" id="ta">
    			<tr style="text-align: center; font-weight: bold;">
    				<td width="200px">书名</td>
    				<td width="100px">作者</td>
    				<td width="100px">价格</td>
    				<td width="100px">购买数量</td>
    				<td width="200px">操作</td>
    			</tr>
    			<tr  id="t1">
    				<td>java</td>
    				<td></td>
    				<td>40.0</td>
    				<td id="cell">3</td>
    				<td align="center">
    					<input type="button" name="" id="" value="修改数量" onclick="update()"/>
    					<input type="button" name="" id="" value="删除" onclick="delRow(this)"/>
    				</td>
    			</tr>
    			<tr >
    				<td>js</td>
    				<td>gg</td>
    				<td>77.60</td>
    				<td>2</td>
    				<td align="center">
    					<input type="button" name="" id="" value="修改数量"onclick="update()" />
    					<input type="button" name="" id="" value="删除" onclick="delRow(this)"/>
    				</td>
    			</tr>
    			<tr>
    				<td>Spring入门</td>
    				<td>mm</td>
    				<td>78.88</td>
    				<td>300</td>
    				<td align="center">
    					<input type="button" name="" id="" value="修改数量" onclick="update()"/>
    					<input type="button" name="" id="" value="删除" onclick="delRow(this)" />
    				</td>
    			</tr>
    		</table>
    	</body>
    </html>
    
    展开全文
  • 最近遇到了一个问题,...很快,我查到了网上“修改Excel内容但保留格式”的方法,大概是需要用到另一个辅助的库xlutils,并为formatting_info参数配置为True,代码大概是这样的: import xlrd import xlwt from ...

    一、问题的来源以及网上的错误方法

    最近遇到了一个问题,给定了一个Excel模板,修改表格里面的内容,但是不能修改Excel表格的格式。用pywin32太慢,用xlrd只能读,用xlwt只能写。

    很快,我查到了网上“修改Excel内容但保留格式”的方法,大概是需要用到另一个辅助的库xlutils,并为formatting_info参数配置为True,代码大概是这样的:

    import xlrd
    import xlwt
    from xlutils.copy import copy
    
    rb = xlrd.open_workbook('open.xls', formatting_info=True)
    wb = copy(rb)
    
    sheet = wb.get_sheet(0)
    for r in range(8):
        for c in range(5):
            sheet.write(r, c, 'R%sC%s'%(r+1, c+1))
    
    wb.save('save.xls')

    大部分格式的确是保住了,但是“修改了”的部分的格式惨不忍睹,一看这就是默认格式嘛。

    于是继续查找,发现xlwt.Worksheet(工作表)对象的write函数的用法参数说明为:

    write(r, c, label='', style=<xlwt.Style.XFStyle object at 0x0186A530>)

    网上找到的教程也有说明,只要配置xlwt库的XFStyle类,并为write函数的第4个参数赋值,就可以为新写入的单元格设置单元格格式了。代码类似于这样,这段代码实现了对RC位置的单元格设置了20号宋体、上下水平居中、四边边框

    style = xlwt.XFStyle()
    style.font.height = 400
    style.font.name = '宋体'
    style.alignment.horz = xlwt.Alignment.HORZ_CENTER
    style.alignment.vert = xlwt.Alignment.VERT_CENTER
    style.borders.left    = xlwt.Borders.THIN
    style.borders.right   = xlwt.Borders.THIN
    style.borders.top     = xlwt.Borders.THIN
    style.borders.bottom  = xlwt.Borders.THIN
    
    sheet.write(r, c, 'R%sC%s'%(r+1, c+1), style)

    然而众所周知,xlwt库只能写不能读,相当于我在设置单元格的样式的,原表格的样式对我是“盲”的。虽然我可以“手动”地记下来所有单元格的格式,然后“抄”过去,但是这多蛋疼啊。

    于是继续网上查找资料,全部都是答非所问的结果,要么告诉我“怎么复制原表格而保留样式”,要么告诉我“如何修改单元格同时配置格式”,但没有一个是回答“如何修改单元格而保留格式”的。

     

    二、根据属性名猜可以用的函数

    没办法,代码小白的我,只好继续猜,猜猜看那个函数能做到这样的配置。

    首先我尝试为工作表对象sheet的sheet.write函数的第4个参数配置“默认”项,企图让它“write”单元格的时候“不修改”格式,比如False啊、0啊、None啊、-1啊,都试过了,全部报错。

    那么尝试找xlrd读取的单元格的cell对象,看看里面有没有存储格式信息。但是cell对象中的属性不多,很快就爬干净了,没有存储格式这样如此“细致”的内容。

    线索断了,我只好穷举用xlrd读取的工作簿rb的所有属性函数,突然发现了一个看起来很像记录格式的东西,rb.xf_list,其中是一个大列表,里面记录的全是“xlrd.formatting.XF”类型的对象,而字体格式的对象名字不是叫做“XFStyle”吗,这可是非常一致了。

    这可是一个很大的突破,我猜想Excel中的单元格格式,不是分别记录到各个单元格的对象的属性中,而是将工作簿中出现的样式汇总,再通过另一个方法把各个单元格设定的格式的“索引编号”读出来,于是就做到了记录各个单元格的格式信息。

    得到了线索就有了进展,我找到xlrd读取的工作表sheet对象有一个sheet.cell_xf_index(rowx, colx)函数,返回结果是一个数值,而且针对相同格式的单元格布局,这个结果在相同格式单元格中计算返回的索引编号很一致!那么结果肯定是这个了!

    于是我急急忙忙把rb.xf_list[sheet.cell_xf_index(rowx, colx)]赋值到了sheet.write函数的style参数上,期待奇迹的发生。

     

    三、瞎猫碰不到死耗子,那就硬着头皮爬源码

    果不其然,事情的进展不会这么顺利,果然出现了报错。

    我突然想起来了write函数的说明,style的默认参数设置是“style=<xlwt.Style.XFStyle object at 0x0186A530>”,而我赋值的是“xlrd.formatting.XF”对象,这都不是一个库的东西,怎么能直接用呢。

    但是我坚定一个信念,既然通过xlutils.copy库的copy函数可以把格式“复制”过去,那么肯定在某个时候发生了读取和写入,这个格式读写的“管道”肯定是通的,关键是我要找到它。

    于是我撑住头皮,开始爬xlutils库的代码,xlutils.copy库的内容很干净,代码只有这些:

    from xlutils.filter import process,XLRDReader,XLWTWriter
    
    def copy(wb):
        w = XLWTWriter()
        process(
            XLRDReader(wb,'unknown.xls'),
            w
            )
        return w.output[0][1]

    于是转头去爬这里引用了的xlutils.filter库。既然知道了rb.xf_list存储了xlrd格式的“单元格样式”,那么就找找看它什么时候转化为了xlwt格式的“单元格样式”。

    按照关键词搜索,果然找了一系列的判断和转换,代码段大概是这样的:

    for rdxf in rdbook.xf_list:
        wtxf = xlwt.Style.XFStyle()
    
        ... 各种判断和转换
    
        self.style_list.append(wtxf)

    那么很显然,我要找的就是self.style_list了。

    那么按理说,我只要获取到“self.style_list”的“self”,也就是它的父对象“BaseWriter”的实例,就能获取到这个属性了(也只有这个方法)。但是我惊讶地发现BaseWriter里面有一个close方法,里面赫然写着“del self.style_list”,这可了得,我虽然不知道它是在什么时候调用了,但是一旦调用了,那不就功亏一篑了,这个列表删掉了那不就全完了。

    再看看xlutils.copy库里的内容,找到对应的定义:

    class XLWTWriter(BaseWriter):
        def __init__(self):
            self.output = []
    
        def close(self):
            if self.wtbook is not None:
                self.output.append((self.wtname,self.wtbook))
                del self.wtbook

    最终copy函数中的定义中返回的是“w.output[0][1]”,那实际上就是“self.wtbook”这个东西了。

    接着找相关定义,可以看到这样一段:

    ...
    self.wtbook = xlwt.Workbook(style_compression=2)
    self.wtbook.dates_1904 = rdbook.datemode
    self.wtname = wtbook_name
    self.style_list = []
    ...

    这可麻烦了呀,wtbook和style_list是BaseWriter类下的两个平级的属性,并没有相互的联系,并且wtbook是一个xlwt.Workbook类型的对象,自然不可能提供获取其父对象的方法(确认了属性也确实没有),这可咋办,进度又陷入了停滞。

    于是我又灵机一动,“copy”函数虽然是已经封装好的,但是我也可以把它拆开,就比方说这样:

    from xlutils.filter import process, XLRDReader, XLWTWriter
    
    rb = xlrd.open_workbook('open.xls', formatting_info=True)
    w = XLWTWriter()
    process(XLRDReader(rb, 'unknown.xls'), w)
    wb = w.output[0][1]

    w是一个XLWTWriter类的对象,而XLWTWriter继承于BaseWriter,BaseWriter有style_list属性。那么我尝试访问其style_list属性,也就是“w.style_list”,并按照之前猜想的方法,将sheet.cell_xf_index函数获取到的每个单元格的对应数字,认为是“w.style_list”列表中的查询单元格样式的序列号,写入程序:

    style_list = w.style_list
    sheet2 = wb.get_sheet(0)
    style = style_list[sheet.cell_xf_index(r, c)]
    sheet2.write(r, c, sheet.cell_xf_index(r, c), style)

    再次打开生成的保存文件,发现格式完美地保留了下来,而内容却如我设定地修改了,至此,程序调试任务完成!

     

    四、终于可以运行的完整代码

    完整样例代码是:

    可以用xlrd获取打开的Excel的每个单元格的格式,并转化为xlwt写入单元格时支持的XFStyle样式参数。

    代码可以实现用xlrd打开Excel后,用xlwt写入单元格内容,而不修改单元格的格式(如果要修改部分原始单元格的格式也可以,只要修改获取到的style的部分属性就可以)

    import xlrd
    from xlutils.filter import process, XLRDReader, XLWTWriter
    
    rb = xlrd.open_workbook('open.xls', formatting_info=True)
    
    # 参考xlutils.copy库内的用法 参考xlutils.filter内的参数定义style_list
    w = XLWTWriter()
    process(XLRDReader(rb, 'unknown.xls'), w)
    wb = w.output[0][1]
    style_list = w.style_list
    
    for n, sheet in enumerate(rb.sheets()):
        sheet2 = wb.get_sheet(n)
        for r in range(sheet.nrows):
            for c, cell in enumerate(sheet.row_values(r)):
                style = style_list[sheet.cell_xf_index(r, c)]
                sheet2.write(r, c, sheet.cell_xf_index(r, c), style)
    
    wb.save('save.xls')

     

    展开全文
  • 之前都做好了修改,但修改成功后刷新页面,导致之前的条件变化(例如选中的日期,页数,排序等),所以后来直接就在修改成功之后,执行某个方法修改表的单元格内容即可 js点击修改之后触发(列表页面【父级页面】)...

    之前都做好了修改,但修改成功后刷新页面,导致之前的条件变化(例如选中的日期,页数,排序等),所以后来直接就在修改成功之后,执行某个方法,修改表的单元格内容即可

    js点击修改之后触发(列表页面【父级页面】):

    var line='';

    function edit(){

        layui.use(['form','table'],function(){

            var form = layui.form

            var table = layui.table;

            table.on('tool(tbdata)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"

                line = obj;

           });

        })

        layer.open({
                type: 2,
                title: '修改用户',
                shadeClose: false,
                offset:'t',
                shade: 0.3,
                area: ['1030px', '100%'],
                content: '/aaa/'+uid+'/'
           });

    }

    修改保存用户之后的触发方法(修改页面【子级页面】):

    window.parent.upchange(realname,tel,email);//执行父级页面的方法

     

    列表页面【父级页面】:

    function upchange(realname,tel,email){

        layui.use(['form','table'],function(){

            var form = layui.form

            var table = layui.table;

            var relidname = '';

            if(line==''){

                    return false;

            }

            obj = line;

            obj.update({

                    realname:realname,

                    tel: tel,

                    email: email,

            });

       })

    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • msFlexGrid 实现 直接修改单元格内容

    千次阅读 2009-08-06 12:10:00
    今天在做维护学生基本信息模块时,我想直接在msflexGrid控件中显示,并修改想改变的基本信息。msflexGrid控件不能直接编辑,所以我们首先要实现能在msflexGrid控件中直接编辑的功能。实现此功能,我使用text控件来...

    今天在做维护学生基本信息模块时,我想直接在msflexGrid控件中显示,并修改想改变的基本信息。msflexGrid控件不能直接编辑,所以我们首先要实现能在msflexGrid控件中直接编辑的功能。实现此功能,我使用text控件来辅助我完成。

    首先当msflexGrid控件发生keypress事件时,我得使text处于显示编辑状态,并能将此控件覆盖在选中的单元格上(所以,在这里我们还要设置一下text的位置及大小,涉及到msflexGrid控件的CellWidth,RowHeight,left,top,CellLeft,CellTop等属性)。

    然后,当msflexGrid控件发生leaveCell事件时,我们就要将所输入的内容付给要修改的单元格了。

    最后我们将所修改的内容写入数据库就好了。

    但我们在操作时,会发现我们点击一个单元格而不去更改,就去选取其他单元格时,会出现刚才的单元格内容为空,或发生其他改变(根据代码不同显示结果不同,我做时由于发生leaveCell事件时,会将刚才的单元格内容等于text的值,所以出现内容为空)。并且,我们的第一行应该是字段名字而不是字段值,所以应该将第一行固定才好。

    想解决这些问题就要弄懂msflexGrid控件的一下属性或方法,而且要将他们联系起来思考。

    1、      msflexGrid.text指的是当前单元格内容

    2、      发生msflexgrid_leaveCell事件,即我们有去点击其他事件的转变过程中时,它的RowCol指的是刚才处于要修改的单元格

    3、      click事件则是现在选中的单元格的RowCol

    在了解这些属性和调试不和情理的地方时我们可以使用msgbox来协助,最重要的是在了解了这些属性后,要能够分析出他们同我们要解决的问题之间的关系。把关系整明白,才有可能在这些属性方法的基础上解决好问题。

    一下是部分代码,有兴趣可以看看

    通用

    Option Explicit

    Dim strCellValue As String

    Dim booChange As Boolean

    ——————————————

     

    Private Sub MSFlexGrid1_Click()

        Dim intRow As Integer

        Dim intCol As Integer

        intRow = MSFlexGrid1.Row

        intCol = MSFlexGrid1.Col

       

        strCellValue = MSFlexGrid1.TextMatrix(intRow, intCol)

       

    End Sub

     

    '使text2得到msflexgri控件里的内容

    Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

      

        If KeyAscii = 13 Then

            Text2.Text = Trim(MSFlexGrid1.Text) + Text2.Text

            Text2.SelStart = Len(Text2.Text)

            booChange = True

        Else

            Text2.Text = Chr(KeyAscii) + Text2.Text

            Text2.SelStart = 1

            booChange = True

           

        End If

        Call ShowText

        KeyAscii = 0

       

    End Sub

     

    '定位text2 的位置,与选中的单元格位置大小重合

    Private Sub ShowText()

        Text2.Visible = False

        Text2.Width = MSFlexGrid1.ColWidth(MSFlexGrid1.Col)

        Text2.Height = MSFlexGrid1.RowHeight(MSFlexGrid1.Row)

        Text2.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left

        Text2.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top

        Text2.Visible = True

        Text2.SetFocus

    End Sub

     

    '修改了内容才改变单元格内容,没有进行修改,则依旧赋值原先的值

    Private Sub MSFlexGrid1_LeaveCell()

        If booChange = True Then

            MSFlexGrid1.Text = Text2.Text

            Text2.Visible = False

            Text2.Text = ""

        Else

            MSFlexGrid1.Text = strCellValue

        End If

    End Sub

    展开全文
  • 在标签 e-table 中添加一个 @cell-dblclick="tableDbEdit" HTML代码 <div id="son-tabs" v-if="nnCodgcxmodels"> ... // 修改单元格的表头名称 var name = column.property row[name] = cellInput.value }; }
  • 为此,我想方设法获取Cell对象,然后猜想Cell对象应该有setContent()或者setString()之类修改文本内容方法吧。。。。我找了好久,都没有找到,看了JXL的API才发现Cell对象根本就没有这样的接口方法。 在百度上...
  • /// <summary> /// DataGridView 编辑单元格的控件时 /// </summary> private void DgvToxicologicalMaintenance_EditingControlShowing(object sender, DataGridViewEditingControlSh...
  • 在对打开的excel进行修改操作时发现程序报错:panic: runtime error: index out of range goroutine 1 [running]: github.com/Luxurioust/excelize.checkCellInArea(0xc0422d68f6, 0x2, 0xc0425a5750, 0x3, 0xc0422...
  • 我用标题一维数组和数据二维数组创建了TableMode,然后在JTable里设置了这个定义好的TableMode,我怎么能够实现程序运行时修改了某个单元格的数据后,把修改的数据存入到二维数组里?
  • layui修改单元格数据

    千次阅读 2019-04-26 15:25:32
    参考:layui官网: https://www.layui.com/demo/table/cellEdit.html ... 修改单元格的js方法 //监听单元格编辑 table.on('edit(levelTableFilter)', function (obj) { ...
  • 因为我是对已经存在的excel表的内容进行修改,发现使用creatRow()方法设置的单元格会导致一整行都覆盖消失了,使用 sheet1.getRow(13).getCell(3);方法可以返回Cell对象,用这个方法可以对单个单元格进行操作 ...
  • from openpyxl import Workbook from openpyxl import load_workbook if __name__ == '__main__': #创建Excel对象 wb = Workbook() file_name = 'test.xlsx' ... #填写表格内容 for row in range(1,
  • elelment表格修改单元格颜色 element表格根据返回值修改单元格颜色 修改单元格颜色 el-table修改单元格颜色
  • 修改单元格内容: SetCellValue(GetCell(table, 0, 0), "测试标题内容修改 测试1"); 插入图片: SetCellImage(builder, GetCell(table, 4, 0), @"D:\测试.png"); 最后别忘了保存。
  • 这里要学习的修改单元格,包括两个方面的内容:一是修改单元格内容;二是修改单元格的样式。 1、获得某个单元格: 方法一:获得当前活动状态的单元格: DataGridView.CurrentCell 获取或设置当前处于活动状态的...
  • EasyUI dateGrid修改单元格

    千次阅读 2016-11-11 14:29:45
    $(function(){ $("#dataGrid"... // 单元格单击事件 onClickCell: function (rowIndex, field, value){ var putValue = "V" === value?"":"V"; ...
  • POI对Excel单元格内容修改

    千次阅读 2018-09-28 09:31:44
    // XLSX版本 const in= new Packages.java.io.FileInputStream("C:\\LJT\\test.xlsx"); const wb= Packages.org.apache.poi.xssf.usermodel.XSSFWorkbook("in") ...此时对单元格内容修改就没什么问题了
  • 当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得。如果当前单元格不存在的...[VB.NET]'取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value)'...
  • 在用户通过填报表录入数据时,如果页面中展现单元格较多,有可能不知道对哪些单元格内容做了修改,通常是要求如果更改过的单元格,该单元格的背景色发生变化,这样能快速定位到哪些单元格做过修改。 报表新增加了个...
  • DataGridView 取得或者修改当前单元格的内容 ... datagridview 改变单元格内容就要触发一个事件 http://topic.csdn.net/u/20080909/13/a23b9769-702c-43dd-936c-949706b1d689.
  • 这里我在xlrd和xlwt基础上实现了修改excel文档的功能,包括插入、删除行,修改单元格内容、删除单元格内容。 限制: 虽然能够打开xlsx文件,但是只能生成xls文件。 公式和宏丢失了。 注意: 行和列都是从0开始计数 ...
  • 使用这个工具像excel一样把表数字类型变成字符串类型 Ctrl+1 1是和!一起的1。出现如下图,然后自己修改单元格格式
  • elementui修改单元格的样式

    万次阅读 2018-08-10 18:15:56
    废话不多说直接上代码 在el-table中定义样式函数,js中写函数...js:这里的函数的返回值有多个参数,大家可以console.log(参数),F12去查看自己想到的数据,并取出,这里我设置的是列名为“标题”的那列单元格样式 ...
  • 保护单元格内容

    2013-04-15 14:47:02
    保护单元格内容  设计要点:单元格保护   秀秀:俺加了一个QQ群,不想让管理员写实名,怎么办呀? 阿金:在你的名字上,按右键-“修改群名片”-取消勾选“允许管理员协助修改群名片”就行了。 秀秀:这么简单...
  • EasyUI dataGrid 修改单元格

    千次阅读 2018-11-19 10:21:30
    // 单元格单击事件 $("#dataGrid").datagrid({  onClickCell: function (rowIndex, field, value){  var putValue = "V" === value?"":"V";  $('#dataGrid')...
  • from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image ...#设置文字图片单元格的行高列宽 column_width = 12.25 row_height = 80.10 sheet.column_dimensio...
  • 前段时间有个需求中有点击datagrid的单元格实现某种事件,调用datagrid的onclickCell这个方法很容易实现,但是体验不好啊,完全不知道自己刚才点击的是哪个单元格,然后就尝试单击单元格的时候给改变单元格的颜色,...
  • elementUI修改单元格、行背景色,

    千次阅读 2019-12-18 10:18:25
    修改单元格背景色cell-style,修改行背景色row-style <template> <el-table :data="tableData" :cell-style="TableCellStyle" :row-style="TableRowStyle" border style="width: 100%"> <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,361
精华内容 30,944
关键字:

修改单元格内容的方法