excel在不改变格式的情况下,对两个名字的某几个日期下的内容进行替换

 1 #-*- coding: UTF-8 -*-
 2 import xlrd
 3 import sys
 4 import locale
 5 import os
 6 import xlwt
 7 from xlutils.copy import copy
 8
 9 reload(sys)
10 sys.setdefaultencoding( "utf-8" )
11 homedir=os.getcwd()
12 print u"文件路径",homedir
13 print u"""执行文件前首先阅读以下说明文档:
14 1.首先请把要换班的excel文件转换为xls格式,即文件打开,点击文件选项,点击另存为并选择格式为xls
15   (可以用xlsx尝试以下,有的时候会出错)
16 2.确定文件sheet的名称为"班表",并且sheet位置排在首位
17 3.把xls文件放在文件路径下面,即和程序放在一个目录里
18 4.每次的修改完成的记录会在本目录下xiugai.txt文件里面
19 """
20
21 def get_col_number(excelname,sheetname,index,name):
22     fileHandler = xlrd.open_workbook(excelname)
23     page = fileHandler.sheet_by_name(sheetname)
24     col1 = page.col_values(index)
25     for item in col1:
26         if item ==name:
27             nrow=col1.index(item)
28     return nrow
29 def changge_worktable(excelname,sheetname,sheetnumber,number1,number2,date):
30     fileHandler = xlrd.open_workbook(excelname)
31     page = fileHandler.sheet_by_name(sheetname)
32     cell_value1= page.cell(number1,date).value
33     cell_value2= page.cell(number2,date).value
34     newwb = xlrd.open_workbook(excelname, formatting_info=True)  # formatting_info 带格式导入
35     outwb = copy(newwb)                           # 建立一个副本来用xlwt来写
36     # 修改值
37     def setOutCell(outSheet, col, row, value):
38         def _getOutCell(outSheet, colIndex, rowIndex):
39             row = outSheet._Worksheet__rows.get(rowIndex)
40             if not row: return None
41             cell = row._Row__cells.get(colIndex)
42             return cell
43         previousCell = _getOutCell(outSheet, col, row)
44         outSheet.write(row, col, value)
45         if previousCell:
46             newCell = _getOutCell(outSheet, col, row)
47             if newCell:
48                 newCell.xf_idx = previousCell.xf_idx
49     outSheet = outwb.get_sheet(sheetnumber)
50     setOutCell(outSheet, date,number1,cell_value2)
51     setOutCell(outSheet, date, number2,cell_value1)
52     outwb.save(excelname)
53
54 def main():
55     excelname=raw_input(u"请输入excelname(带文件类型名):".encode(‘utf-8‘)).decode(sys.stdin.encoding or locale.getpreferredencoding(True))
56     print excelname
57     sheetname=u"班表"
58     sheetnumber=0
59     for i in range(0,500):
60         try:
61             name1=raw_input("name1:".encode(‘utf-8‘)).decode(sys.stdin.encoding or locale.getpreferredencoding(True))
62             print name1
63             name2=raw_input("name2:".encode(‘utf-8‘)).decode(sys.stdin.encoding or locale.getpreferredencoding(True))
64             print name2
65             datenumberlist=raw_input(u"请输入datenumber(多个的话用英文逗号隔开):").split(",")
66             print datenumberlist
67
68             number1=get_col_number(excelname,sheetname,1,name1)
69             number2=get_col_number(excelname,sheetname,1,name2)
70             for datenumber in datenumberlist:
71
72                 changge_worktable(excelname,sheetname,sheetnumber,number1,number2,int(datenumber)+3)
73             print "i:",i
74             with open("xiugai.txt","a") as output:
75                 output.write(name1+"***"+name2+"***"+str(datenumberlist)+"\r\n")
76             print "success"
77         except:
78             print "there is an error in your enter,please check and repeat the input again"
79             continue
80         esc=raw_input(u"想退出的话输入esc,继续的话按回车:".encode(‘utf-8‘)).decode(sys.stdin.encoding or locale.getpreferredencoding(True))
81         if esc=="esc":
82             break
83     print "game is over"
84
85 if __name__ == "__main__":
86     main()

修改的excel格式图如下

				
时间: 2024-10-10 08:25:52

excel在不改变格式的情况下,对两个名字的某几个日期下的内容进行替换的相关文章

EXCEL VBA算写字楼的租赁情况

用EXCEL维护了写字楼的租赁情况,需要用BI工具分析,于是就写了个VBA进行分析. Sub Rental_Click() '判断变量的类型函数 'VarType = TypeName("fafafas") '第一步拷贝EXCEL标题 Sheet2.Activate Sheet2ColumnCount = Sheet2.UsedRange.Columns.Count For i = 1 To Sheet2ColumnCount Sheet3.Cells(1, i).Value = Sh

C#对word、excel、pdf等格式文件的操作总结 .

一.word 这是我以前工作时写过的一个业务逻辑处理类,里面有不少文件操作的方法,这里主要关注一下C#对word的操作.里面的方法可以直接拿出来用,主要是通过word的dot模版来进行创建word.替换word等操作. namespace Excel2Word { public class BLL { private Microsoft.Office.Interop.Word.Application app = null;//全局变量 word应用程序 /// /// 从Excel中读取数据 /

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

Excel 表格的文本格式莫名其妙变成日期或者货币问题

最近有同事遇到过Excel 表格的文本格式莫名其妙变成日期或者货币,重新设置好格式,保存了,再打开却莫名其妙变日期了或者变成金额了. 解决方法: 1. 打开Excel,任意选中一单元格,单击鼠标右键,选择设置单元格格式.2. 在数字自定义类型中,找到类似前缀为[$-F400]的类型格式(或者类似的比如[$-F800]),点击删除.3. 保存. 参考:http://club.excelhome.net/forum.php?mod=viewthread&tid=1217938&page=1

Excel 单元格自定义格式技巧总结

第一部分 Excel 中的单元格格式是一个最基本但是又很高级的技能,说它基本是因为我们几乎天天都会用到它,会用它来设置一些简单的格式,比如日期,文本等等:高级是因为利用 Excel 单元格的自定义格式我们可以实现一些看起来非常神奇和有用的效果.下面我们就由浅入深的来介绍一下 Excel 单元格自定义格式的知识和技巧. 1."G/通用格式" 以常规的数字显示,相当于"分类"列表中的"常规"选项. 代码:G/通用格式.10 显示为 10:10.1 显

如何在不介入第三个变量的情况下实现两个数的交换

如何在不介入第三个变量的情况下实现两个数的交换: 1 package myeclipseFiles2; 2 3 public class Operator { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 int a=6; 8 int b=1; 9 System.out.println(a+":"+b); 10 11 //方法一:不借助第三个变量完成两个数的交换 1

不占用任何额外空间的情况下交换两个数的值

题目 假如有x.y两个数,如何在不占用任何额外空间的情况下交换两个数的值? 思路 平时我们在交换两个数的值时,往往会用一个中间数temp来实现效果,现在需要不占用任何额外空间,自然就不能使用这种寻常的方法了:这里可以有两种方法来实现. 方法一 int x = 5; int y = 10; x = x + y; y = x - y; x = x - y; 先将两个数之和附给x,接着x-y自然就是原本x的值,这时候赋值给y,y就拿到了x原本的值.此时x依然是两个数之和,再进行x-y自然就是原本x的值

excel转换成csv格式

利用pandas库将excel转换成csv格式 import pandas as pd df=pd.read_excel("D:\张香婷\python\Python1.xlsx",index_col=None,na_values=['dgf']) df.to_csv('D:\张香婷\python\Python1.csv',encoding="utf_8_sig") df=pd.read_csv('D:\张香婷\python\Python1.csv',engine='

播下一个行动,收获一种习惯;播下一种习惯,收获一种性格;

播下一个行动,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运.思想会变成语言,语言会变成行动,行动会变成习惯,习惯会变成性格.性格会影响人生! 习惯不加以抑制,会变成生活的必需品,不良的习惯随时改变人生走向.人往往难以改变习惯,因为造习惯的就是自己,结果人又成为习惯的奴隶! 人生重要的不是你从哪里来,而是你到哪里去.当你在埋头工作的时侯,一定要抬头看看你去的方向.方向不对,努力白费! 你来自何处并不重要,重要的是你要去往何方,人生最重要的不是所站的位置,而是所去的方向.人只