Rumah > pembangunan bahagian belakang > tutorial php > php导出Excel里HTML内容文件类方法

php导出Excel里HTML内容文件类方法

小云云
Lepaskan: 2023-03-21 14:20:01
asal
2536 orang telah melayarinya

本文主要和大家分享php导出Excel里HTML内容文件类方法,主要以代码的形式和大家分享,希望能帮助到大家。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

<?php

/**

 * 导出Excel(内容为HTML)文件类

 * @author yzq

 */

class Excel_html{

 

    private $_common_style    = &#39;&#39;;             //通用样式

    private $_head            = &#39;&#39;;             //表头内容

    private $_body            = &#39;&#39;;             //表格内容

    private $_head_bgcolor    = &#39;#f3f3f3&#39;;      //表头默认背景颜色

    private $_body_bgcolor    = &#39;&#39;;             //表格默认背景颜色

    private $_default_width   = 100;            //默认宽度

    Private $_default_align   = &#39;center&#39;;       //默认对齐方式

    private $_default_charset = &#39;utf-8&#39;;        //默认导出编码

    private $_tables          = [];             //一个文件里有多个table时使用

    private $_table_brs       = [];             //table间是否换行

 

    /**

     * 设置表头背景颜色

     */

    public function set_head_bgcolor($bgcolor = &#39;#f3f3f3&#39;){

        $this->_head_bgcolor = $bgcolor;

    }

 

    /**

     * 设置表格背景颜色

     */

    public function set_body_bgcolor($bgcolor = &#39;&#39;){

        $this->_body_bgcolor = $bgcolor;

    }

 

    /**

     * 设置输出字符编码

     */

    public function set_charset($charset = &#39;utf-8&#39;){

        $this->_default_charset = $charset;

    }

 

    /**

     * 设置默认对齐方式

     */

    public function set_align($align = &#39;center&#39;){

        $this->_default_align = $align;

    }

 

    /**

     * 设置默认宽度

     * @param int $width

     */

    public function set_default_width($width = 100){

        $this->_default_width = $width;

    }

 

    /**

     * 设置通用样式

     * @param string $style

     */

    public function set_common_style($style = &#39;&#39;){

        $this->_common_style = $style;

    }

 

    /**

     * 添加一个table

     * @param int $add_br  是否添加换行

     */

    public function add_talbe($add_br = 0){

        $this->_tables[] = array(

            &#39;head&#39; => $this->_head,

            &#39;body&#39; => $this->_body,

        );

 

        $this->_table_brs[] = $add_br ? 1 : 0;

        $this->_head = &#39;&#39;;

        $this->_body = &#39;&#39;;

    }

 

 

    /**

     * 添加表头

     * @param array $head_arr = array(

     *     // array(array(字段名1, 宽度, 其他设置), 字段名2)  宽度 其他设置(如跨列,跨行等) 可选

     *     array(

     *         array(&#39;序号&#39;, 100, [&#39;colspan&#39; => 2, &#39;rowspan&#39; => 2]),

     *         &#39;订单号&#39;,

     *         &#39;同行客户&#39;

     *     )

     * )

     *

     */

    public function add_head($head_arr = array()){

        $head_html = &#39;<tr>&#39;;

        if (is_array($head_arr) && !empty($head_arr)){

            foreach ($head_arr as $head){

                if (!is_array($head)){

                    $head_html .= "<th width=&#39;" . $this->_default_width . "&#39; bgcolor=&#39;" . $this->_head_bgcolor . "&#39;>" . $this->get_value($head)  . "</th>\n";

                }else {

                    $width = !empty($head[1]) ? $head[1] : $this->_default_width;

                    $other = isset($head[2]) ? $head[2] : [];

                    $head_html .= "<th width=&#39;" . $width . "&#39; bgcolor=&#39;" . $this->_head_bgcolor . "&#39;";

                    if(!empty($other) && is_array($other)){

                        foreach($other as $k => $v){

                            $head_html .= " {$k}=&#39;{$v}&#39; ";

                        }

                    }

                    $head_html .= " >" . $this->get_value($head[0]) . "</th>\n";

                }

            }

        }

 

        $head_html   .= "</tr>\n";

        $this->_head .= $head_html;

    }

 

    /**

     * 添加表格内容

     * @param array $body_arr = array(

     *     //array(array(字段值, 对齐方式, 样式, 其他设置))  //对齐方式、样式、其他设置(如跨列,跨行等)可选

     *     array(

     *         array(1, &#39;left&#39;, &#39;style="..."&#39;, [&#39;colspan&#39; => 2, &#39;rowspan&#39; => 2]),

     *         array(&#39;2&#39;, &#39;right&#39;),

     *         3

     *     )

     * )

     *

     * @param $deal_long_num  是否处理长度较长的数字字符串   防止转换为科学计数法

     *

     */

    public function add_body($body_arr = array(), $deal_long_num = false){

        $body_html = &#39;<tr>&#39;;

        if (is_array($body_arr) && !empty($body_arr)){

            foreach ($body_arr as $body){

                if (!is_array($body)){

                    $style = $deal_long_num ? &#39;style="mso-number-format:\&#39;\@\&#39;;"&#39; : &#39;&#39;;

                    $body_html .= "<td bgcolor=&#39;" . $this->_body_bgcolor . "&#39; align=&#39;" . $this->_default_align . "&#39; {$style}>" . $this->get_value($body) . "</td>\n";

                }else {

                    $align = isset($body[1]) ? $body[1] : $this->_default_align;

                    $style = isset($body[2]) ? $body[2] : &#39;&#39;;

                    $other = isset($body[3]) ? $body[3] : [];

 

                    if (!empty($style)){

                        $style = $deal_long_num ? (rtrim($style, &#39;;"&#39;) . ";mso-number-format:&#39;\@&#39;;" . &#39;"&#39;) : $style;

                    }else{

                        $style = $deal_long_num ? &#39;style="mso-number-format:\&#39;\@\&#39;;"&#39; : &#39;&#39;;

                    }

 

                    $body_html .= "<td bgcolor=&#39;" . $this->_body_bgcolor . "&#39; align=&#39;" . $align ."&#39; " . $style . "";

                    if(!empty($other) && is_array($other)){

                        foreach($other as $k => $v){

                            $body_html .= " {$k}=&#39;{$v}&#39; ";

                        }

                    }

                    $body_html .= ">" . $this->get_value($body[0])  . "</td>\n";

                }

            }

        }

 

        $body_html   .= "</tr>\n";

        $this->_body .= $body_html;

    }

 

    /**

     * 下载excel文件

     */

    public function downLoad($filename = &#39;&#39;){

        $this->add_talbe();

        $chare_set     = $this->_default_charset;

        $down_content  = &#39;<meta http-equiv="Content-Type" content="text/html; charset=&#39; . $chare_set . &#39;" />&#39; . "\n";

        $down_content .= $this->_common_style;

 

        foreach ($this->_tables as $t_key => $table){

            if (empty($table[&#39;head&#39;]) && empty($table[&#39;body&#39;])){

                continue;

            }

 

            $down_content .= &#39;<table border="1">&#39; . "\n";

            $down_content .= $table[&#39;head&#39;] . "\n";

            $down_content .= $table[&#39;body&#39;] . "\n";

            $down_content .= &#39;</table>&#39;;

 

            if ($this->_table_brs[$t_key]){

                $down_content .= "<br/>";

            }

 

            $down_content .= "\n";

        }

 

        if(!$filename) {

            $filename = date(&#39;YmdHis&#39;,time()).&#39;.xls&#39;;

        }

        $ci = &get_instance();

        $ci->load->helper(&#39;download&#39;);

 

        force_download($filename, $down_content);

    }

 

    private function get_value($value){

        if (strtolower($this->_default_charset) != &#39;utf-8&#39;){

            return iconv(&#39;utf-8&#39;, $this->_default_charset, $value);

        }else{

            return $value;

        }

    }

}

Salin selepas log masuk

使用举例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

$excel = new Excel_html();

    $head = [

        [&#39;序号&#39;, 50], [&#39;姓名&#39;, 100], [&#39;移动电话&#39;, 120], [&#39;部门&#39;, 120]

    ];

$excel->add_head($head);

$rs = array(

    array(

        &#39;realname&#39; => &#39;a&#39;,

        &#39;mobile&#39; => &#39;12345678901&#39;,

        &#39;department_name&#39; => &#39;测试&#39;,

    ),

    array(

        &#39;realname&#39; => &#39;b&#39;,

        &#39;mobile&#39; => &#39;12345678912&#39;,

        &#39;department_name&#39; => &#39;技术&#39;,

    ),

);

foreach($rs as $i => $item){

    $excel->add_body([

        $i + 1,

        $item[&#39;realname&#39;],

        $item[&#39;mobile&#39;],

        $item[&#39;department_name&#39;],

    ]);

}

$excel->downLoad();

exit();

Salin selepas log masuk

相关推荐:

PHP导出EXCEL快速开发指南

php使用原生的方法导出excel实例分享

php导入及导出excel文件

Atas ialah kandungan terperinci php导出Excel里HTML内容文件类方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan