def graph(request): e = "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" d = base64.b64decode(e) s = BytesIO(d) workbook = load_workbook(filename=s) for i in range(3, len(workbook.sheetnames)): workbook.active = i sheet = workbook.active # text = sheet.cell(row=3, column=2).value # no_response = sheet.cell(row=4, column=2).value # print("tex>>>>>>>>>>>>>>>>>", text, no_response)it chart1 = chart.BarChart() chart1.type = "col" chart1.style = 10 data = chart.Reference(worksheet=sheet, min_col=1, min_row=3, max_col=2, max_row=sheet.max_row) chart1.add_data(data, titles_from_data=True, from_rows=True) sheet.add_chart(chart1, "D2") e = BytesIO(save_virtual_workbook(workbook)) rs = base64.b64encode(e.getvalue()) print(rs) ds = base64.b64decode(rs) return HttpResponse( ds, content_type= "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
def create_chart(self): """Class method to accept all given chart parameters and generate a simple chart to the intended sheet and cell.""" try: chart_type = self.spin.get() if chart_type == "Line": self.chart = opc.LineChart() # Creates a line chart elif chart_type == "Bar": self.chart = opc.BarChart() # Creates a bar chart elif chart_type == "Area": self.chart = opc.AreaChart() # Creates an area chart elif chart_type == "Pie": self.chart = opc.PieChart() # Creates a pie chart else: self.chart = opc.DoughnutChart() # Creates a doughnut chart self.chart.title = self.chart_entry.get() # Sets the chart title self.chart.y_axis.title = self.y_axis.get( ) # Sets the y axis title self.chart.x_axis.title = self.x_axis.get( ) # Sets the x axis title destination_cell = self.destination_entry.get( ) # Sets the cell which the chart will be anchored chart_range = self.ws + "!" + self.range.get() data = opc.Reference(self.current_sheet, range_string=chart_range) self.chart.add_data(data) # Adds data from range to chart self.current_sheet.add_chart( self.chart, destination_cell) # Add the chart to the desired cell self.wb.save(self.edit_path) # Saves the file except: pass
def main(): # predefined list of male and female names male_names_list = [ "James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Thomas", "Charles", "Christopher", "Daniel", "Matthew", "Anthony", "Donald", "Mark", "Paul", "Steven", "Andrew", "Kenneth", "Joshua", "Kevin", "Brian", "George", "Edward", "Ronald", "Timothy", "Jason", "Jeffrey", "Ryan", "Jacob", "Gary", "Nicholas", "Eric", "Jonathan", "Stephen", "Larry", "Justin", "Scott", "Brandon", "Benjamin", "Samuel", "Frank", "Gregory", "Raymond", "Alexander", "Patrick", "Jack", "Dennis", "Jerry", "Tyler", "Aaron", "Jose", "Henry", "Adam", "Douglas", "Nathan", "Peter", "Zachary", "Kyle", "Walter", "Harold", "Jeremy", "Ethan", "Carl", "Keith", "Roger", "Gerald", "Christian", "Terry", "Sean", "Arthur", "Austin", "Noah", "Lawrence", "Jesse", "Joe", "Bryan", "Billy", "Jordan", "Albert", "Dylan", "Bruce", "Willie", "Gabriel", "Alan", "Juan", "Logan", "Wayne", "Ralph", "Roy", "Eugene", "Randy", "Vincent", "Russell", "Louis", "Philip", "Bobby", "Johnny", "Bradley" ] female_names_list = [ "Mary", "Patricia", "Jennifer", "Linda", "Elizabeth", "Barbara", "Susan", "Jessica", "Sarah", "Karen", "Nancy", "Lisa", "Margaret", "Betty", "Sandra", "Ashley", "Dorothy", "Kimberly", "Emily", "Donna", "Michelle", "Carol", "Amanda", "Melissa", "Deborah", "Stephanie", "Rebecca", "Laura", "Sharon", "Cynthia", "Kathleen", "Amy", "Shirley", "Angela", "Helen", "Anna", "Brenda", "Pamela", "Nicole", "Samantha", "Katherine", "Emma", "Ruth", "Christine", "Catherine", "Debra", "Rachel", "Carolyn", "Janet", "Virginia", "Maria", "Heather", "Diane", "Julie", "Joyce", "Victoria", "Kelly", "Christina", "Lauren", "Joan", "Evelyn", "Olivia", "Judith", "Megan", "Cheryl", "Martha", "Andrea", "Frances", "Hannah", "Jacqueline", "Ann", "Gloria", "Jean", "Kathryn", "Alice", "Teresa", "Sara", "Janice", "Doris", "Madison", "Julia", "Grace", "Judy", "Abigail", "Marie", "Denise", "Beverly", "Amber", "Theresa", "Marilyn", "Danielle", "Diana", "Brittany", "Natalie", "Sophia", "Rose", "Isabella", "Alexis", "Kayla", "Charlotte" ] names_lists_tuple = (male_names_list, female_names_list) # filename indices limits min_index = 1 max_index = 11 # generate files for index in range(min_index, max_index): # Create new workbook wb = Workbook() ws = wb.active # Generate first line (labels) labels = ["id", "name", "grade"] ws.append(labels) # Generate remaining 49 lines (actual values) min_row = 2 max_row = 51 for row in range(min_row, max_row): # generate random uid min_uid = 10**8 max_uid = 10**9 random_uid = randrange(min_uid, max_uid) # generate random name random_list = choice(names_lists_tuple) random_name = choice(random_list) # generate random grade min_grade = 0 max_grade = 101 random_grade = randrange(min_grade, max_grade) # generate row with random values random_row = (random_uid, random_name, random_grade) # append row to workbook ws.append(random_row) # generate grades distribution chart min_col = max_col = labels.index("grade") + 1 grades_values = chart.Reference(ws, min_col, min_row, max_col, max_row) grades_chart = chart.BarChart() grades_chart.add_data(grades_values) # add generated chart to worksheet chart_row = 1 chart_col = ascii_lowercase[len(labels)] ws.add_chart(grades_chart, f"{chart_col}{chart_row}") # Write to new .xlsx file filename = f"data\\students{index}.xlsx" wb.save(filename)
sheet1['A2'] = "Groups C and D" # Unmerge sheet1.unmerge_cells('A2:A10') # Freeze Panes sheet1.freeze_panes = 'A2' # Freeze Row 1 sheet1.freeze_panes = 'B1' # Freeze Column A sheet1.freeze_panes = 'D5' # Freeze Cols A to C and Rows 1 to 4 sheet1.freeze_panes = 'A1' # Unfreeze all sheet1.freeze_panes = None # Unfreeze all # Charting for i in range(1, 11): # Create Data in Col L sheet1['L' + str(i)] = random.randint(1, 11) theRef = xlct.Reference(sheet1, min_col=12, min_row=1, max_col=12, max_row=10) theSeries = xlct.Series(theRef, title='Random Values') theChart = xlct.BarChart() theChart.title = 'Bar Chart' theChart.append(theSeries) sheet1.add_chart(theChart, 'M14') theChart = xlct.LineChart() theChart.title = 'Line Chart' theChart.append(theSeries) sheet1.add_chart(theChart, 'M30') workBook.save('sampleChart.xlsx')
def PH(source1,source2,result): #定義一個HE的函數 r=[] #紀錄rgb g=[] b=[] r2=[] g2=[] b2=[] wb = Workbook() ws = wb.active for i in range(256): #初始化紀錄rgb的list r.append(0) g.append(0) b.append(0) r2.append(0) g2.append(0) b2.append(0) image1 = io.imread(source1) #輸入圖片(image1) image2 = io.imread(source2) #輸入圖片(imager) for col in range(image1.shape[0]): #紀錄轉換前的rgb for row in range(image1.shape[1]): r[image1[col,row,0]]+=1 g[image1[col,row,1]]+=1 b[image1[col,row,2]]+=1 for col in range(image2.shape[0]): #紀錄轉換後的rgb for row in range(image2.shape[1]): r2[image2[col,row,0]]+=1 g2[image2[col,row,1]]+=1 b2[image2[col,row,2]]+=1 print(result,"-----> finish") ws.append([result]) ws.append([str(image1.shape[0])+"*"+str(image1.shape[1])]) ws.append(["","","before","","","after"]) ws.append(["resolution","value","Red","Green","Blue","Red","Green","Blue"]) for i in range(256): ws.append([str(image1.shape[0]*image1.shape[1]),i,r[i],g[i],b[i],r2[i],g2[i],b2[i]]) a = chart.Reference(ws, min_row=5, min_col=3, max_row=260, max_col=3) #劃出直方圖-R1 s1 = chart.Series(a, title='') c1 = chart.BarChart() c1.title = 'R1' c1.style = 4 c1.append(s1) ws.add_chart(c1,'J5') a = chart.Reference(ws, min_row=5, min_col=4, max_row=260, max_col=4) #劃出直方圖-G1 s2 = chart.Series(a, title='') c2 = chart.BarChart() c2.title = 'G1' c2.style = 5 c2.append(s2) ws.add_chart(c2,'J20') a = chart.Reference(ws, min_row=5, min_col=5, max_row=260, max_col=5) #劃出直方圖-B1 s3 = chart.Series(a, title='') c3 = chart.BarChart() c3.title = 'B1' c3.append(s3) ws.add_chart(c3,'J35') a = chart.Reference(ws, min_row=5, min_col=6, max_row=260, max_col=6) #劃出直方圖-R2 s4 = chart.Series(a, title='') c4 = chart.BarChart() c4.title = 'R2' c4.style = 4 c4.append(s4) ws.add_chart(c4,'S5') a = chart.Reference(ws, min_row=5, min_col=7, max_row=260, max_col=7) #劃出直方圖-G2 s5 = chart.Series(a, title='') c5 = chart.BarChart() c5.title = 'G2' c5.style = 5 c5.append(s5) ws.add_chart(c5,'S20') a = chart.Reference(ws, min_row=5, min_col=8, max_row=260, max_col=8) #劃出直方圖-B2 s6 = chart.Series(a, title='') c6 = chart.BarChart() c6.title = 'B2' c6.append(s6) ws.add_chart(c6,'S35') wb.save(result)
import openpyxl from openpyxl import chart wb = openpyxl.Workbook() sheet = wb.active for row in range(1, 11): sheet.cell(row, 1).value = row ref_obj = chart.Reference(sheet, 1, 1, 1, 10) series_obj = chart.Series(ref_obj, title='First series') chart_obj = chart.BarChart() chart_obj.append(series_obj) chart_obj.y = 50 chart_obj.x = 100 chart_obj.w = 300 chart_obj.h = 200 sheet.add_chart(chart_obj) wb.save('sampleChart.xlsx')