龙空技术网

xlwt列宽计算新公式的精确性验证

python刀客 90

前言:

当前姐妹们对“c语言327681”大致比较注重,你们都想要剖析一些“c语言327681”的相关文章。那么小编同时在网摘上汇集了一些有关“c语言327681””的相关资讯,希望姐妹们能喜欢,大家快快来了解一下吧!

在如何使用xlwt精确控制Excel表格列宽一文中,作者提到了xlwt的列宽像素计算公式:

def width_in_pixels(self):# *** Approximation ****    return int(round(self.width * 0.0272 + 0.446, 0))

同时提出了一个精确计算列宽的新公式:

公式4:width=round(列宽字符数*256+182.8571,0)

新公式的精确性验证过程如下:

使用下面python代码生成test1.xls:

import xlwtbook = xlwt.Workbook(encoding='utf-8')sheet=book.add_sheet('12')k=0for pixel in range(12, 1791):    if pixel % 250==0:        sheet=book.add_sheet(str(pixel))        k=0    chars=round((pixel-5)/7,2)    width=round(chars*256+182.8571)    sheet.col(k).width=width    sheet.write(0, k, width)  #列宽值    sheet.write(1, k, sheet.col(k).width_in_pixels()) #近似像素    sheet.write(2, k, pixel) #期望像素    sheet.write(3, k, chars) #期望字符数    k+=1#保存平时成绩表book.save('test1.xls')
在Excel中打开test1.xls, 运行宏代码:
Sub ff()r = 10For j = 1 To 8    For i = 1 To 250        Sheet1.Cells(r, 30) = Sheets(j).Cells(1, i)        Sheet1.Cells(r, 31) = Sheets(j).Cells(2, i)        Sheet1.Cells(r, 32) = Sheets(j).Cells(3, i)        Sheet1.Cells(r, 33) = Sheets(j).Cells(4, i)        Sheet1.Cells(r, 34) = Sheets(j).Columns(i).Width * 4 / 3  ‘实际像素        Sheet1.Cells(r, 35) = Sheets(j).Columns(i).ColumnWidth   '实际字符数        Sheet1.Cells(r, 36) = Sheets(j).Columns(i).Width             ‘实际磅数        r = r + 1    NextNextEnd Sub
获得数据如下表所示。近似像素从每列的width_in_pixels方法获得,后面的实际像素、实际字符和实际磅数通过Excel VBA脚本获得。

width

近似像素

期望像素

期望字符

实际像素

实际字符

实际磅数

439

12

12

1

12

1

9

475

13

13

1.14

13

1.14

9.75

513

14

14

1.29

14

1.29

10.5

549

15

15

1.43

15

1.43

11.25

585

16

16

1.57

16

1.57

12

621

17

17

1.71

17

1.71

12.75

659

18

18

1.86

18

1.86

13.5

695

19

19

2

19

2

14.25

731

20

20

2.14

20

2.14

15

769

21

21

2.29

21

2.29

15.75

805

22

22

2.43

22

2.43

16.5

841

23

23

2.57

23

2.57

17.25

877

24

24

2.71

24

2.71

18

915

25

25

2.86

25

2.86

18.75

951

26

26

3

26

3

19.5

987

27

27

3.14

27

3.14

20.25

1025

28

28

3.29

28

3.29

21

1061

29

29

3.43

29

3.43

21.75

1097

30

30

3.57

30

3.57

22.5

1133

31

31

3.71

31

3.71

23.25

1171

32

32

3.86

32

3.86

24

1207

33

33

4

33

4

24.75

1243

34

34

4.14

34

4.14

25.5

1281

35

35

4.29

35

4.29

26.25

1317

36

36

4.43

36

4.43

27

1353

37

37

4.57

37

4.57

27.75

1389

38

38

4.71

38

4.71

28.5

1427

39

39

4.86

39

4.86

29.25

1463

40

40

5

40

5

30

1499

41

41

5.14

41

5.14

30.75

1537

42

42

5.29

42

5.29

31.5

1573

43

43

5.43

43

5.43

32.25

1609

44

44

5.57

44

5.57

33

1645

45

45

5.71

45

5.71

33.75

1683

46

46

5.86

46

5.86

34.5

1719

47

47

6

47

6

35.25

1755

48

48

6.14

48

6.14

36

1793

49

49

6.29

49

6.29

36.75

1829

50

50

6.43

50

6.43

37.5

1865

51

51

6.57

51

6.57

38.25

1901

52

52

6.71

52

6.71

39

1939

53

53

6.86

53

6.86

39.75

1975

54

54

7

54

7

40.5

2011

55

55

7.14

55

7.14

41.25

2049

56

56

7.29

56

7.29

42

2085

57

57

7.43

57

7.43

42.75

2121

58

58

7.57

58

7.57

43.5

2157

59

59

7.71

59

7.71

44.25

2195

60

60

7.86

60

7.86

45

2231

61

61

8

61

8

45.75

2267

62

62

8.14

62

8.14

46.5

2305

63

63

8.29

63

8.29

47.25

2341

64

64

8.43

64

8.43

48

2377

65

65

8.57

65

8.57

48.75

2413

66

66

8.71

66

8.71

49.5

2451

67

67

8.86

67

8.86

50.25

2487

68

68

9

68

9

51

2523

69

69

9.14

69

9.14

51.75

2561

70

70

9.29

70

9.29

52.5

2597

71

71

9.43

71

9.43

53.25

2633

72

72

9.57

72

9.57

54

2669

73

73

9.71

73

9.71

54.75

2707

74

74

9.86

74

9.86

55.5

2743

75

75

10

75

10

56.25

2779

76

76

10.14

76

10.14

57

2817

77

77

10.29

77

10.29

57.75

2853

78

78

10.43

78

10.43

58.5

2889

79

79

10.57

79

10.57

59.25

2925

80

80

10.71

80

10.71

60

2963

81

81

10.86

81

10.86

60.75

2999

82

82

11

82

11

61.5

3035

83

83

11.14

83

11.14

62.25

3073

84

84

11.29

84

11.29

63

3109

85

85

11.43

85

11.43

63.75

3145

86

86

11.57

86

11.57

64.5

3181

87

87

11.71

87

11.71

65.25

3219

88

88

11.86

88

11.86

66

3255

89

89

12

89

12

66.75

3291

90

90

12.14

90

12.14

67.5

3329

91

91

12.29

91

12.29

68.25

3365

92

92

12.43

92

12.43

69

3401

93

93

12.57

93

12.57

69.75

3437

94

94

12.71

94

12.71

70.5

3475

95

95

12.86

95

12.86

71.25

3511

96

96

13

96

13

72

3547

97

97

13.14

97

13.14

72.75

3585

98

98

13.29

98

13.29

73.5

3621

99

99

13.43

99

13.43

74.25

3657

100

100

13.57

100

13.57

75

3693

101

101

13.71

101

13.71

75.75

3731

102

102

13.86

102

13.86

76.5

3767

103

103

14

103

14

77.25

3803

104

104

14.14

104

14.14

78

3841

105

105

14.29

105

14.29

78.75

3877

106

106

14.43

106

14.43

79.5

3913

107

107

14.57

107

14.57

80.25

3949

108

108

14.71

108

14.71

81

3987

109

109

14.86

109

14.86

81.75

4023

110

110

15

110

15

82.5

4059

111

111

15.14

111

15.14

83.25

4097

112

112

15.29

112

15.29

84

4133

113

113

15.43

113

15.43

84.75

4169

114

114

15.57

114

15.57

85.5

4205

115

115

15.71

115

15.71

86.25

4243

116

116

15.86

116

15.86

87

4279

117

117

16

117

16

87.75

4315

118

118

16.14

118

16.14

88.5

4353

119

119

16.29

119

16.29

89.25

4389

120

120

16.43

120

16.43

90

4425

121

121

16.57

121

16.57

90.75

4461

122

122

16.71

122

16.71

91.5

4499

123

123

16.86

123

16.86

92.25

4535

124

124

17

124

17

93

4571

125

125

17.14

125

17.14

93.75

4609

126

126

17.29

126

17.29

94.5

4645

127

127

17.43

127

17.43

95.25

4681

128

128

17.57

128

17.57

96

4717

129

129

17.71

129

17.71

96.75

4755

130

130

17.86

130

17.86

97.5

4791

131

131

18

131

18

98.25

4827

132

132

18.14

132

18.14

99

4865

133

133

18.29

133

18.29

99.75

4901

134

134

18.43

134

18.43

100.5

4937

135

135

18.57

135

18.57

101.25

4973

136

136

18.71

136

18.71

102

5011

137

137

18.86

137

18.86

102.75

5047

138

138

19

138

19

103.5

5083

139

139

19.14

139

19.14

104.25

5121

140

140

19.29

140

19.29

105

5157

141

141

19.43

141

19.43

105.75

5193

142

142

19.57

142

19.57

106.5

5229

143

143

19.71

143

19.71

107.25

5267

144

144

19.86

144

19.86

108

5303

145

145

20

145

20

108.75

5339

146

146

20.14

146

20.14

109.5

5377

147

147

20.29

147

20.29

110.25

5413

148

148

20.43

148

20.43

111

5449

149

149

20.57

149

20.57

111.75

5485

150

150

20.71

150

20.71

112.5

5523

151

151

20.86

151

20.86

113.25

5559

152

152

21

152

21

114

5595

153

153

21.14

153

21.14

114.75

5633

154

154

21.29

154

21.29

115.5

5669

155

155

21.43

155

21.43

116.25

5705

156

156

21.57

156

21.57

117

5741

157

157

21.71

157

21.71

117.75

5779

158

158

21.86

158

21.86

118.5

5815

159

159

22

159

22

119.25

5851

160

160

22.14

160

22.14

120

5889

161

161

22.29

161

22.29

120.75

5925

162

162

22.43

162

22.43

121.5

5961

163

163

22.57

163

22.57

122.25

5997

164

164

22.71

164

22.71

123

6035

165

165

22.86

165

22.86

123.75

6071

166

166

23

166

23

124.5

6107

167

167

23.14

167

23.14

125.25

6145

168

168

23.29

168

23.29

126

6181

169

169

23.43

169

23.43

126.75

6217

170

170

23.57

170

23.57

127.5

6253

171

171

23.71

171

23.71

128.25

6291

172

172

23.86

172

23.86

129

6327

173

173

24

173

24

129.75

6363

174

174

24.14

174

24.14

130.5

6401

175

175

24.29

175

24.29

131.25

6437

176

176

24.43

176

24.43

132

6473

177

177

24.57

177

24.57

132.75

6509

177

178

24.71

178

24.71

133.5

6547

179

179

24.86

179

24.86

134.25

6583

180

180

25

180

25

135

6619

180

181

25.14

181

25.14

135.75

6657

182

182

25.29

182

25.29

136.5

6693

182

183

25.43

183

25.43

137.25

6729

183

184

25.57

184

25.57

138

6765

184

185

25.71

185

25.71

138.75

6803

185

186

25.86

186

25.86

139.5

6839

186

187

26

187

26

140.25

6875

187

188

26.14

188

26.14

141

6913

188

189

26.29

189

26.29

141.75

6949

189

190

26.43

190

26.43

142.5

6985

190

191

26.57

191

26.57

143.25

7021

191

192

26.71

192

26.71

144

7059

192

193

26.86

193

26.86

144.75

7095

193

194

27

194

27

145.5

7131

194

195

27.14

195

27.14

146.25

7169

195

196

27.29

196

27.29

147

7205

196

197

27.43

197

27.43

147.75

7241

197

198

27.57

198

27.57

148.5

7277

198

199

27.71

199

27.71

149.25

7315

199

200

27.86

200

27.86

150

7351

200

201

28

201

28

150.75

7387

201

202

28.14

202

28.14

151.5

7425

202

203

28.29

203

28.29

152.25

7461

203

204

28.43

204

28.43

153

7497

204

205

28.57

205

28.57

153.75

7533

205

206

28.71

206

28.71

154.5

7571

206

207

28.86

207

28.86

155.25

7607

207

208

29

208

29

156

7643

208

209

29.14

209

29.14

156.75

7681

209

210

29.29

210

29.29

157.5

7717

210

211

29.43

211

29.43

158.25

7753

211

212

29.57

212

29.57

159

7789

212

213

29.71

213

29.71

159.75

7827

213

214

29.86

214

29.86

160.5

7863

214

215

30

215

30

161.25

根据上表得出两点结论:

xlwt的列宽像素计算公式不准确,列宽像素只是一个近似值,和实际像素存在一定误差,最大误差达到9个(表中没有显示)。使用新公式width=round(列宽字符数*256+182.8571,0) ,期望列宽字符数和实际列宽字符数完全一致,说明新公式能够方便程序员精确设置列宽值,把列宽精度控制到像素级别。

标签: #c语言327681