单元格下拉列表:我的单元格我做主!

图片 8

PHPExcel基本操作:定义EXCEL实体即定义一个PHPEXCEL对象,并设置EXCEL对象内显示内容

来源:微信公众号表妹的EXCEL

上周六我发表的文章《分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility》受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility类库自上次发文起,又经过了多次的改进,增加了许多的功能与方法,可以全面满足大家的需求,下面先来看一下新方法的测试结果:

// Excel开始// 准备EXCEL的包括文件// Error reporting error_reporting;// PHPExcel require_once dirname . 'PHPExcel.php';// 生成新的excel对象$objPHPExcel = new PHPExcel();// 设置excel文档的属性$objPHPExcel->getProperties()->setCreator ->setLastModifiedBy ->setTitle("Microsoft Office Excel Document") ->setSubject ->setDescription ->setKeywords ->setCategory;// 开始操作excel表// 操作第一个工作表$objPHPExcel->setActiveSheetIndex;// 设置工作薄名称$objPHPExcel->getActiveSheet()->setTitle(iconv('gbk', 'utf-8', 'phpexcel测试'));// 设置默认字体和大小$objPHPExcel->getDefaultStyle->setName(iconv);$objPHPExcel->getDefaultStyle->setSize;

// 如果需要输出EXCEL格式if($m_exportType=="excel"){ $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // 从浏览器直接输出$filename header; header; header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type: application/vnd.ms-excel;"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header("Content-Disposition:attachment;filename=".$filename); header("Content-Transfer-Encoding:binary"); $objWriter->save; }// 如果需要输出PDF格式if{ $objWriter = PHPExcel_IOFactory::createWriter; $objWriter->setSheetIndex; header; header; header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type: application/pdf"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header("Content-Disposition:attachment;filename=".$m_strOutputPdfFileName); header("Content-Transfer-Encoding:binary"); $objWriter->save; }

$objPHPExcel->getActiveSheet()->getColumnDimension;

$objPHPExcel->getActiveSheet()->getRowDimension->setRowHeight;

$objPHPExcel->getActiveSheet()->mergeCells;

图片 1

第一个新增功能,列宽自适应,当超过30个字符则将单元格内容设为换行

设置A1单元格加粗,居中:

很多小伙伴在制作完成EXCEL模板后,都希望模板的使用人能够按照自己设定的规范使用模板。例如我们希望使用人在“部门”单元格里填写的是“人力资源部、行政管理部、财务部、市场销售部”,但结果往往是事与愿违,使用人经常填写的乱七八糟,“人力部”、“人资部”、“行政部”、“管理部”等等。如何能让使用人只能从我们规定的“选项”中进行选择,把单元格的主动权牢牢地掌控在我们自己手里呢?答案就是:使用数据有效性给单元格做个下拉列表

任意一个无模板的导出方法均支持该功能,示例代码如下:

$styleArray1 = array( 'font' => array( 'bold' => true, 'size'=>12, 'color'=>array( 'argb' => '00000000', ), ), 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, ),);// 将A1单元格设置为加粗,居中$objPHPExcel->getActiveSheet->applyFromArray;$objPHPExcel->getActiveSheet->getFont;

~~**下拉列表**的分割线~~**

        /// <summary>
        /// 测试方法:测试将DataTable导出到EXCEL,无模板
        /// </summary>
        [TestMethod]
        public void TestExportToExcelByDataTable()
        {
            DataTable dt = GetDataTable();
            string excelPath = ExcelUtility.Export.ToExcel(dt, "导出结果");
            Assert.IsTrue(File.Exists(excelPath));
        }

给特定单元格中写入内容:

一级下拉列表

结果如下图示:

$objPHPExcel->getActiveSheet()->setCellValue;

$objPHPExcel->getActiveSheet->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

$objPHPExcel->getActiveSheet->getFont->setARGB(PHPExcel_Style_Color::COLOR_BLACK); // 黑色

$objPHPExcel->getActiveSheet->getFill->setARGB; // 将背景设置为浅粉色

$objPHPExcel->getActiveSheet()->getStyle->getNumberFormat()->setFormatCode;

// 将数据中心图片放在J1单元格内$objDrawing = new PHPExcel_Worksheet_Drawing();$objDrawing->setName;$objDrawing->setDescription;$objDrawing->setPath;$objDrawing->setWidth;$objDrawing->setHeight;$objDrawing->setCoordinates;$objDrawing->setWorksheet($objPHPExcel->getActiveSheet;

说明】选中单元格–数据-数据有效性(2013版以后改名为“数据验证”)–设置–序列–来源—输入备选项(备选项间用英文逗号分隔)-确定。

图片 2

在单元格中设置超链接:

图片 3

 

$objPHPExcel->getActiveSheet()->setCellValue('H8', iconv('gbk', 'utf-8', '燕南天'));$objPHPExcel->getActiveSheet->getHyperlink()->setUrl;

$styleThinBlackBorderOutline = array( 'borders' => array ( 'outline' => array ( 'style' => PHPExcel_Style_Border::BORDER_THIN, //设置border样式 //'style' => PHPExcel_Style_Border::BORDER_THICK, 另一种样式 'color' => array , //设置border颜色 ), ),);$objPHPExcel->getActiveSheet()->getStyle->applyFromArray($styleThinBlackBorderOutline);//添加一个新的worksheet $objExcel->createSheet(); $objActSheet = $objExcel->getSheet; $objActSheet->setTitle;

PS:来源文本框也可以选中输入备选项的单元格地址,如下图:

第二个新增功能,依据数据源(DataTable、DataGridView)的列类型自动将与之对应的EXCEL列的单元格式设为相同的格式内容显示,如:整数类型显示在单元格内无小数的数字格式,有小数位的类显示在单元格内2位小数数字格式,日期类型显示在单元格内日期+时间的日期格式,布尔类型显示在单元格内布尔格式,任意一个无模板的导出方法均支持该功能,示例代码如下:

图片 4

        /// <summary>
        /// 测试方法:测试将DataTable导出到EXCEL,无模板,且指定导出的列名,以及导出列名的重命名
        /// </summary>
        [TestMethod]
        public void TestExportToExcelByDataTable3()
        {
            DataTable dt = GetDataTable();
            string[] expColNames = { "Col1", "Col2", "Col3", "Col4", "Col5", "Col7" };
            Dictionary<string, string> expColAsNames = new Dictionary<string, string>() { 
                {"Col1","列一"},
                {"Col2","列二"},
                {"Col3","列三"},
                {"Col4","数字列"},
                {"Col5","列五"},
                {"Col7","日期列"}
            };
            string excelPath = ExcelUtility.Export.ToExcel(dt, "导出结果", null, expColNames, expColAsNames);
            Assert.IsTrue(File.Exists(excelPath));
        }

结果如下图示:

这样设置完成后,单元格右侧就有了小箭头,点击小箭头就可以选择设定好的内容了。当使用人在“咱的”单元格里输入“咱没同意”的内容时,EXCEL就会报警禁止该操作。

图片 5

图片 6

 


第三个新增功能,在第二个新增功能的基础上,增加可以自定义设置列的单元格显示格式(支持日期类型、数字类型),任意一个无模板的导出方法均支持该功能,示例代码如下:

如果你的填写条件比较宽,单元格内除了可以填写你设定的内容,还可以填写其他内容时,可以进行如下设置:

        /// <summary>
        /// 测试方法:测试将DataTable导出到EXCEL,无模板,且指定某些列的显示格式
        /// </summary>
        [TestMethod]
        public void TestExportToExcelByDataTable6()
        {
            DataTable dt = GetDataTable();
            var colDataFormatDic = new Dictionary<string, string>
            {
                {"Col4","0.000"}, //将Col4列DOUBLE类型的EXCEL对应列格式设置为显示成3位小数(默认为2位小数)
                {"Col7","yyyy-mm-dd"}//将Col7列DateTime类型的EXCEL对应列格式设置为年月日(默认为yyyy/mm/dd hh:mm:ss)
            };
            //更多设置格式可在EXCEL的设置单元格格式中的数字选项卡中的自定义格式列表(若无,可自定义,建议先在EXCEL中测试好格式字符串后再用于程序中)

            string excelPath = ExcelUtility.Export.ToExcel(dt, "导出结果", colDataFormats: colDataFormatDic);
            Assert.IsTrue(File.Exists(excelPath));
        }

【说明】数据-数据有效性-出错警告-勾选掉“输入无效数据时显示出错警告”

结果如下图示:

图片 7

图片 8

这样设置后,填写人在单元格内除了可以选择你设定的内容,还可以自己填写其他内容。

 

相信很多小伙伴都和表妹一样是“剁手党”吧?对于某宝填写收货地址的选项栏应该都不陌生吧?先选择省份,再根据省份选择市,再根据市选择区。那么能不能让我们单元格的“下拉列表”也具有这样的功能呢?答案当然是可定的啦!下面表妹就和小伙伴们分享一下多级下拉列表

换种格式定义测试:

多级下拉列表

        /// <summary>
        /// 测试方法:测试将DataTable导出到EXCEL,无模板,且指定某些列的显示格式
        /// </summary>
        [TestMethod]
        public void TestExportToExcelByDataTable7()
        {
            DataTable dt = GetDataTable();
            var colDataFormatDic = new Dictionary<string, string>
            {
                {"Col4","¥#,##0.00_);(¥#,##0.00)"}, //将Col4列DOUBLE类型的EXCEL对应列格式设置为显示成包含货币格式,如:¥5.00(默认为2位小数)
                {"Col7","yyyy"年"m"月"d"日";@"}//将Col7列DateTime类型的EXCEL对应列格式设置为中文年月日,如:2015年12月5日(默认为yyyy/mm/dd hh:mm:ss)
            };
            //更多设置格式可在EXCEL的设置单元格格式中的数字选项卡中的自定义格式列表(若无,可自定义,建议先在EXCEL中测试好格式字符串后再用于程序中)

            string excelPath = ExcelUtility.Export.ToExcel(dt, "导出结果", colDataFormats: colDataFormatDic);
            Assert.IsTrue(File.Exists(excelPath));
        }

1.备料:备选项单元格(要按层次处理好哟!横竖两种款式任意选一种即可)

结果如下图示:

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图