2017-07-02 121 views
-1

我已经将文本文件复制到excel表格,用;分隔符分隔单元格。Python - 读取由分号分隔的文本文件,使用openpyxl绘制图表

我需要绘制一个图表使用我获得的相同的文件。由于所有复制的值都是type=str,我的图表给了我错误的观点。

请建议克服这一点。剧情应为int值

from datetime import date 
from openpyxl import Workbook,load_workbook 
from openpyxl.chart import (
    LineChart, 
    Reference, 
    Series, 
) 
from openpyxl.chart.axis import DateAxis 
excelfile = "C:\Users\lenovo\Desktop\how\openpychart.xlsx" 
wb = Workbook() 
ws = wb.active 

f = open("C:\Users\lenovo\Desktop\sample.txt") 
data = [] 
num = f.readlines() 
for line in num: 
    line = line.split(";") 
    ws.append(line) 
f.close() 
wb.save(excelfile) 
wb.close() 

wb = load_workbook(excelfile, data_only=True) 
ws = wb.active 

c1 = LineChart() 
c1.title = "Line Chart" 
##c1.style = 13 
c1.y_axis.title = 'Size' 
c1.x_axis.title = 'Test Number' 

data = Reference(ws, min_col=6, min_row=2, max_col=6, max_row=31) 
series = Series(data, title='4th average') 
c1.append(series) 

data = Reference(ws, min_col=7, min_row=2, max_col=7, max_row=31) 
series = Series(data, title='Defined Capacity') 
c1.append(series) 

##c1.add_data(data, titles_from_data=True) 

# Style the lines 
s1 = c1.series[0] 
s1.marker.symbol = "triangle" 
s1.marker.graphicalProperties.solidFill = "FF0000" # Marker filling 
s1.marker.graphicalProperties.line.solidFill = "FF0000" # Marker outline 

s1.graphicalProperties.line.noFill = True 

s2 = c1.series[1] 
s2.graphicalProperties.line.solidFill = "00AAAA" 
s2.graphicalProperties.line.dashStyle = "sysDot" 
s2.graphicalProperties.line.width = 100050 # width in EMUs 

##s2 = c1.series[2] 
##s2.smooth = True # Make the line smooth 

ws.add_chart(c1, "A10") 
## 
##from copy import deepcopy 
##stacked = deepcopy(c1) 
##stacked.grouping = "stacked" 
##stacked.title = "Stacked Line Chart" 
##ws.add_chart(stacked, "A27") 
## 
##percent_stacked = deepcopy(c1) 
##percent_stacked.grouping = "percentStacked" 
##percent_stacked.title = "Percent Stacked Line Chart" 
##ws.add_chart(percent_stacked, "A44") 
## 
### Chart with date axis 
##c2 = LineChart() 
##c2.title = "Date Axis" 
##c2.style = 12 
##c2.y_axis.title = "Size" 
##c2.y_axis.crossAx = 500 
##c2.x_axis = DateAxis(crossAx=100) 
##c2.x_axis.number_format = 'd-mmm' 
##c2.x_axis.majorTimeUnit = "days" 
##c2.x_axis.title = "Date" 
## 
##c2.add_data(data, titles_from_data=True) 
##dates = Reference(ws, min_col=1, min_row=2, max_row=7) 
##c2.set_categories(dates) 
## 
##ws.add_chart(c2, "A61") 


### setup and append the first series 
##values = Reference(ws, (1, 1), (9, 1)) 
##series = Series(values, title="First series of values") 
##chart.append(series) 
## 
### setup and append the second series 
##values = Reference(ws, (1, 2), (9, 2)) 
##series = Series(values, title="Second series of values") 
##chart.append(series) 
## 
##ws.add_chart(chart) 
wb.save(excelfile) 
wb.close() 

enter image description here

回答

0

我已经修改了下面的代码在for循环和它的工作。

f = open("C:\Users\lenovo\Desktop\sample.txt") 
    data = [] 
    num = f.readlines() 

    for line in num: 
     line = line.split(";") 
     new_line=[] 
     for x in line: 
      if x.isdigit(): 
       x=int(x) 
       new_line.append(x) 
      else: 
       new_line.append(x) 
     ws.append(new_line) 
    f.close() 
    wb.save(excelfile) 
    wb.close() 

对于每个列表,每个值的检查,如果它是一个数字,如果是在转换另一个列表整数和商店。

使用x = map(int,x)也没有工作,因为我也有字符值。 我感到上面比使用X =地图(INT,x)的使用try和除

由于 岜

更容易
相关问题