美文网首页
python 读取excel 文件

python 读取excel 文件

作者: Jesson3264 | 来源:发表于2018-12-14 11:19 被阅读0次
import xlrd
import xlwt
import os
import math
from datetime import date, datetime

def read_excel():
    workbook = xlrd.open_workbook(r'./excel.xlsx')
    print (workbook.sheet_names())
    #sheet2_name = workbook.sheet_names()[1]
    print("1111111111")
    # 根据sheet索引或者名称获取sheet内容
    sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
    sheet2 = workbook.sheet_by_name('sheet2')

    # sheet的名称,行数,列数
    print (sheet2.name,sheet2.nrows,sheet2.ncols)

    # 获取整行和整列的值(数组)
    rows = sheet2.row_values(3) # 获取第四行内容
    cols = sheet2.col_values(2) # 获取第三列内容
    print (rows)
    print (cols)

    # 获取单元格内容
    print (sheet2.cell(1,0).value.encode('utf-8'))
    print (sheet2.cell_value(1,0).encode('utf-8'))
    print (sheet2.row(1)[0].value.encode('utf-8'))
    
    # 获取单元格内容的数据类型
    print (sheet2.cell(1,0).ctype)

def read_excel2():
    workbook = xlrd.open_workbook(r'./63限时活动.xlsx')
    print (workbook.sheet_names())
    #sheet2_name = workbook.sheet_names()[1]
    print("1111111111")
    # 根据sheet索引或者名称获取sheet内容
    sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
    print("LimitActivityControlTable start")
    sheet2 = workbook.sheet_by_name('LimitActivityControlTable')
    print("LimitActivityControlTable end")
    print ("rows, colos",sheet2.name,sheet2.nrows,sheet2.ncols)
    for i in range(sheet2.nrows):
        for j in range(sheet2.ncols):
            print(sheet2.cell(i,j).value)
    print ("read end.......")
    # sheet的名称,行数,列数
    print (sheet2.name,sheet2.nrows,sheet2.ncols)
    # 获取整行和整列的值(数组)
    rows = sheet2.row_values(3) # 获取第四行内容
    cols = sheet2.col_values(2) # 获取第三列内容
    print (rows)
    print (cols)

    # 获取单元格内容
    print (sheet2.cell(1,0).value.encode('utf-8'))
    print (sheet2.cell_value(1,0).encode('utf-8'))
    print (sheet2.row(1)[0].value.encode('utf-8'))
## int 数组检查
def int_array_check(str):
    #alg: 不能有 , 以外的符号
    pass
# 配置表类型,单元格的值, 单元格python的类型
def handle_cell_value(config_type, cell_value, cell_type):
    ret_value_list = []
    if config_type == "int":
        #可能填的是 0000 这样的值,cell_type 是否是 string 类型
        if cell_type != 2 or cell_value % 1 != 0:
            raise ("")
            pass

        pass
    elif config_type == "int[]":
        pass
    elif config_type ==  "string":
        pass
    else:
        print ("error type")

    
    pass

#读到数据结构中, 再输出,方便控制
def handle_one_file(sheet):
    err_info_list = []
    print("sheet name:", sheet.name)
    lua_file_name = sheet.name + ".lua"
    file = open(lua_file_name, 'w')
    file.write("local " + sheet.name + " = {\n")
   
    field_name_list = []
    row0 = sheet.row_values(0)
    for i in range(len(row0)):
        field_name_list.append(row0[i])

    field_type_list = []
    rows2 = sheet.row_values(2)
    for i in range(len(rows2)):
        field_type_list.append(rows2[i])
    
    config_list = []

    for i in range(sheet.nrows):
        if i < 5:
            continue
        ctype_id = sheet.cell(i,0).ctype
        if  ctype_id == 0:
            print("id is  null.")
            continue
        #file.write("i:"+str(i))
        dict_line = {}
        has_err = False
        for j in range(len(sheet.row_values(i))):
            #cell_value = sheet.cell_value(i,j)
            cell_value = sheet.row(i)[j].value
            cell_type  = sheet.cell(i,j).ctype
            if field_type_list[j] == "int":
                print ("type:int")
                if cell_type != 2 or cell_value % 1 != 0:
                    print("python get type:", cell_type, "cell_value:", cell_value)
                    errinfo = "i:" + str(i) + "\tj:" + str(j) + "\t 类型错误"
                    print(errinfo)
                    err_info_list.append(errinfo)
                    has_err = True
                    continue
                cell_value = int(cell_value)
            elif field_type_list[j] == "int[]": #int 数组类型
                if cell_type != 2:
                    print("error")
                int_array_check(cell_value)


            elif field_type_list[j] == "string":
                
                
                pass
            else:
                print("bad type")
        
            dict_line[field_name_list[j]] = cell_value

        if has_err == False:
            config_list.append(dict_line)

    ##test for gets.
    #file.write("sssssssss" +str(len(config_list)))
    print("..............:", len(config_list))
    for i in config_list:
        #line = config_list[i]
        for key in i:
            info = "key:" + str(key) + "\tvalue:"+str(i[key]) +"\n"
            file.write(info)
            print("key:",key, "\t\t\t\tvalue:", i[key])
        file.write("\n")
    
    file.close()
        #print("i:", i+1, config_list)
    #os.mknod(lua_file_name)
def read_excel_file():
    workbook = xlrd.open_workbook(r'./63限时活动.xlsx')
    #print(workbook.sheet_names())
    for i in range(len(workbook.sheet_names())):
        print(i, workbook.sheet_names()[i])
        sheet = workbook.sheet_by_name("ChristmasPartyTable")
        handle_one_file(sheet)
        if i == 0:
            break
if __name__ == '__main__':
    #read_excel()
    str0 = 0000.0
    if isinstance(str0, int):
        print("is int")
    else:
        print ("not int")

    #print(int(str0))
    read_excel_file()
    ##read_excel2()
"""
 2
['整形','175.0']
 1
['字符串','最后的骑士']
 2
['浮点型','6.23']
 3
['日期','42909.6461574']
1 0
['空值','']
4
['布尔型','1']

"""
"""
first = True
    for i in range(sheet.nrows):
        if i < 5:
            continue
        
        ctype = sheet.cell(i,0).ctype
        print("ctype:", ctype)
        cell_value = sheet.cell_value(i, 0)
        if ctype == 0: #非空值
            continue

        if first == False:
            file.write(",\n")
        else:
            first = False

        file.write("\t[" + str(int(cell_value)) + "] = { \n")
        
        first_filed = True
        for j in range(len(sheet.row_values(i))):
            if field_type_list[j] == 3:
                if first_filed == False:
                    file.write(",\n")
                else:
                    first_filed = False
                file.write("\t\t['" + field_name_list[j] + "'] = " + str(sheet.cell_value(i,j)))

        file.write("\n\t\t}")

        #file.write(rows4[i] + " ")
    
    
    file.write("\n\t}\n")
    file.write("return " + sheet.name)

    file.close()
"""

"""
读取填写int 类型时,有时获取到的是带.0 的Number类型数据, 转成 string 会输出.0

"""

相关文章

网友评论

      本文标题:python 读取excel 文件

      本文链接:https://www.haomeiwen.com/subject/zlwwhqtx.html