精华内容
下载资源
问答
  • worksheet.Cells[1, 1] = "Excel单元格赋值"; //Excel单元格赋值 range.Font.Size = 15; //设置字体大小 range.Font.Underline=true; //设置字体是否有下划线 range.Font.Name="黑体"; 设置字体的种类 range....
  • 前言 自学做一个小demo,有个功能涉及到excel的导入导出,在网上到处查找了一番,发先也并不难,这里整理记录一下,给有相同想法的朋友们做个参考。 正文

    前言

    最近在做一个小项目,有个模块的功能涉及到excel的导入导出,并且要求对导出的excel文件部分列和单元格设置为只读不可更改,在网上到处查找了一番资料,结合自己的想法,发现也并不难,这里整理记录一下,给有相同想法和有这个需求的朋友们做个参考。

    正文

    java导出excel文件用的最多的就用poi的方式,这里也一样。POI 提供了对2003版本的Excel的支持 ---- HSSFWorkbook,可用于生成.xls。POI 提供了对2007版本以及更高版本的支持 ---- XSSFWorkbook ,可生成.xlsx后缀的excel文件。

    导出的大致的思路,先从数据库查询出要导出的数据,这些数据可以放入一个List<bean>集合中,然后把数据按一定顺序写入excel的文件中,再对写入的数据到excel单元格进行样式设置,再以流的形式传给前端。大概流程就是上面描述的这样,细节还是在于对创建单元格写入数据后的格式进行设置为只读 (其目的就是为了规范化用户的操作,防止误改)

    我的处理方式是这样的:为方便和规范用户的使用,在项目里就先创建一个excel的模板,设置两行标题,第一行标题用中文,第二行标题用英文(设置英文的目的是可以用java反射来按字段的方式以便导入导出功能的编写),并将这两行标题设置为锁定,和保护,出这两行外的单元格不锁定,等在写入数据后再根据需要进行是否锁定,在获取数据库的数据后,先对模板文件进行复制,再把数据写入模板的复制文件中,最后再把复制文件以输出流的形式传给前端,再删除复制文件。excel模板文件的手动锁定保护在文章结尾给出。

    1.先添加poi的依赖

            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.1.2</version>
            </dependency>

    2.service层,调用自己写的ExcelUtil类的exportExcel静态方法

     /**
         * excel导出,导出当天最新的项目信息,这里提供给controller层调用
         * @param request
         * @param response
         * @return
         */
        @Override
        @RequestMapping(method = RequestMethod.GET)
        @ResponseBody
        public String exportExcelMethod(HttpServletRequest request, HttpServletResponse response) {
            //这里的List<bean>就是你的数据库取出对应的数据,这里有些不方便展示就以此代指了
            List<Bean> ucmList = getBeanList();
            try {
                ExcelUtil.exportExcel(ucmList, response);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "导出成功!";
        }

    3.ExcelUtil类的exportExcel静态方法:功能先复制模板一份(不对模板进行操作),然后操作复制体的模板文件,对其进行数据写入,单元格的锁定和解锁设置,再通过流发送给前端,发送完后删除复制体模板文件。

     public static void exportExcel(List<Bean> ucmBoList, HttpServletResponse response) {
            String templatePath = System.getProperty("user.dir") + File.separator + "report/exceltemplate/";
            String templateName = "template.xlsx";
            String templatePathAndName = templatePath + templateName;
            File templateFile = new File(templatePathAndName);
            File copyFile = null;
            if (templateFile != null && templateFile.exists()) {
                copyFile = copyExcelTemplateByXSSF(templatePath, templateName);
            } else {
                return;
            }
    
            if (copyFile != null && copyFile.exists()) {
                //创建一个工作簿
                XSSFWorkbook xssfWorkbook = null;
                //创建工作表
                XSSFSheet xssfSheet = null;
                XSSFCellStyle lockCellStyle = null;
                XSSFCellStyle unLockCellStyle = null;
                try {
                    xssfWorkbook = new XSSFWorkbook(copyFile);
                    // xssfSheet = xssfWorkbook.createSheet();
                    //这里是用自己已创建好的模板,所以就是getSheet(index)
                    xssfSheet = xssfWorkbook.getSheetAt(0);
                    //创建单元格
                    XSSFCell xssfCell;
                    //创建单元格样式,这里设置是否锁定
                    lockCellStyle = xssfWorkbook.createCellStyle();
                    lockCellStyle.setLocked(true);
                    //创建单元格样式,这里设置不锁定
                    unLockCellStyle = xssfWorkbook.createCellStyle();
                    unLockCellStyle.setLocked(false);
    
                    if (ucmBoList != null && ucmBoList.size() > 0) {
    
                        for (int i = 0; i < ucmBoList.size(); i++) {
                            UcmBean ucm = ucmBoList.get(i);
                            //细节,前两行为标题
                            XSSFRow xssfRow = xssfSheet.createRow(i + 2);
    
                            //录入日期
                            XSSFCell cell0 = xssfRow.createCell(0);
                            cell0.setCellValue(ucm.getOcDate());
    
                            //业务部门
                            XSSFCell cell1 = xssfRow.createCell(1);
                            cell1.setCellValue(ucm.getBusinessUnit());
    
                            //项目类别编号
                            XSSFCell cell2 = xssfRow.createCell(2);
                            cell2.setCellValue(ucm.getProjectTypeCode());
    
                            //项目类别名称
                            XSSFCell cell3 = xssfRow.createCell(3);
                            cell3.setCellValue(ucm.getProjectTypeName());
    
                            //项目编号
                            XSSFCell cell4 = xssfRow.createCell(4);
                            cell4.setCellValue(ucm.getProjectNo());
    
                            //项目名称
                            XSSFCell cell5 = xssfRow.createCell(5);
                            cell5.setCellValue(ucm.getProjectName());
    
                            //项目评级
                            XSSFCell cell6 = xssfRow.createCell(6);
                            cell6.setCellValue(ucm.getProjectRating());
    
                            //融资主体
                            List<FinancierBO> financierBOList = ucm.getFinancierInfo();
                            String finName = "", finCode = "", finRating = "";
                            if (financierBOList != null && financierBOList.size() > 0) {
                                for (FinancierBO financierBO : financierBOList) {
                                    if (financierBO != null) {
                                        if (financierBO.getName() != null) {
                                            finName = finName + financierBO.getName() + "\n";
                                        } else {
                                            finName = finName + "" + "\n";
                                        }
                                        if (financierBO.getUniformCreditCode() != null) {
                                            finCode = finCode + financierBO.getUniformCreditCode() + "\n";
                                        } else {
                                            finCode = finCode + "" + "\n";
                                        }
                                        if (financierBO.getRating() != null) {
                                            finRating = finRating + financierBO.getRating() + "\n";
                                        } else {
                                            finRating = finRating + "" + "\n";
                                        }
                                    }
                                }
                            }
                    }
                    //是否体系内业务
                            XSSFCell cell7 = xssfRow.createCell(7);
                            cell7.setCellStyle(unLockCellStyle);
                            if (ucm.getSystemBusinessFlag() != null) {
                                if (ucm.getSystemBusinessFlag()) {
                                    cell7.setCellValue("是");
                                } else {
                                    cell7.setCellValue("否");
                                }
                            } else {
                                cell7.setCellValue("");
                            }
    
                            //行业分类
                            XSSFCell cell8 = xssfRow.createCell(8);
                            cell8.setCellStyle(unLockCellStyle);
                            cell8.setCellValue(ucm.getIndtNum());
    
                            //担保机构评级
                            XSSFCell cell9 = xssfRow.createCell(9);
                            cell9.setCellStyle(unLockCellStyle);
                            cell9.setCellValue(ucm.getGuarantorInstitutionRating());
    
                    setResponseHeader(response, copyFile.getName());
    
                    //锁定不锁定只有加了这个才有用(默认都是锁定后就不可以对单元格内容进行更改)
                    xssfSheet.protectSheet("123*456");
                    OutputStream out = response.getOutputStream();
                    xssfWorkbook.write(out);
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InvalidFormatException e) {
                    e.printStackTrace();
                } finally {
                    if (copyFile.exists()) {
                        copyFile.delete();
                    }
                    System.out.println("成功之后需要,删除复制的模板源文件,以免占用服务器的内存!");
                }
            } else {
                return;
            }
        }

    4. ExcelUtil类的copyExcelTemplateByXSS静态方法,复制模板文件,并以日期的形式作为文件名

    /**
         * 复制excel的模板
         *
         * @param excelFilePath 模板路径
         * @param fileName      模板名称
         * @return 复制后的模板副本文件,或null
         */
        public static File copyExcelTemplateByXSSF(String excelFilePath, String fileName) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String now = dateFormat.format(new Date());
            String templateFilePathAndName = excelFilePath + fileName;
            String copyFilePathAndName = excelFilePath + "/XXX模板" + now + ".xlsx";
    
            File templateFile = new File(templateFilePathAndName);
            File copyFile = null;
            XSSFWorkbook xssfWorkbook = null;
            if (templateFile.exists()) {
                copyFile = new File(copyFilePathAndName);
                try {
                    xssfWorkbook = new XSSFWorkbook(templateFile);
                } catch (InvalidFormatException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                return copyFile;
            }
            try {
                OutputStream out = new FileOutputStream(copyFile);
                xssfWorkbook.write(out);
                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //file.delete();
            }
            return copyFile;
        }

    5. ExcelUtil类的setResponseHeader方法,用来设置respond的响应体形象,包括编码格式和以附件的形式进行下载

    // 发送响应流方法
        public static void setResponseHeader(HttpServletResponse response, String fileName) {
    
            try {
                try {
                    fileName = new String(fileName.getBytes("gbk"), "ISO8859-1");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                //response.setCharacterEncoding("utf-8");
                response.reset();// 清空输出流
    
            //告诉浏览器这个文件的名字和类型,attachment:作为附件下载;inline:直接打开
                response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
    
            // response.setContentType("application/vnd.ms-excel");如果设置为这种就是生成.xls文件
                response.setContentType("application/msexcel");
                response.addHeader("Pargam", "no-cache");
                response.addHeader("Cache-Control", "no-cache");
                response.setCharacterEncoding("ISO8859-1");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    6.control层调用service层

    @Controller("/file")
    public class ExcelController {
    
        @Autowired
        UcmService ucmService;
    
        @RequestMapping("/downLoad")
        //@ResponseBody
        public void excletest(HttpServletRequest request, HttpServletResponse response){
              ucmService.exportExcelMethod(request, response);
        }

    以上就是整个处理过程的的大致代码。下面给出excel模板的标题设置为不可修改。选中标题行右键单元格设置-->保护->锁定

    -->确定

          

    再到审阅,点击保护工作表-->购上下面的钩子,输入密码,再次确认密码即可。然后你想修改就必须输入密码才能更改了。

        

    看到这里的,就麻烦点个赞吧!O(∩_∩)O

    展开全文
  • C#怎样通过代码实现讲数据导入excel表并将excel设置只读模式,目前写入数据没问题,关键就是怎么设为只读
  • Excel中对单元格进行只读设置

    千次阅读 2010-05-12 16:06:58
    1.选择不需保护的单元格,然后点击“格式--单元格”在“保护”页将“锁定”项去掉。 ... ... 这样在选择单元格之外的单元格就是只读了...首先选好先不进行设置只读”属性的列,然后其它的就是只读属性啦!  ...
    1.选择不需保护的单元格,然后点击“格式--单元格”在“保护”页将“锁定”项去掉。       
    2.点击“工具”--“保护”--“保护工作表”       
    3.必要时可填写密码。       
    这样在选择单元格之外的单元格就是只读了单元格,不能进编辑。
    
    首先选好先不进行设置“只读”属性的列,然后其它的就是只读属性啦!

     

    展开全文
  • 1.首先,excel默认所有单元格都是被“锁定”的——当“锁定单元格”按钮被激活时。 因此,第一步,选择所有单元格设置单元格格式,取消“保护”—“锁定”的勾选。 2.选择需要保护其不被更改的单元格设置其...

    1.首先,excel默认所有单元格都是被“锁定”的——当“锁定单元格”按钮被激活时。

    因此,第一步,选择所有单元格,设置单元格格式,取消“保护”—“锁定”的勾选。

    image   image

    2.选择需要保护其不被更改的单元格,设置其“保护”为“锁定”。

    image image

    3.在菜单中选择“审阅”,点击其中的“保护工作表”,意为保护单元格格式为“锁定”的单元格。

    image

    按照默认的两个选项勾选确定即可。

    image

    4.测试,当识图更改单元格时,excel会发出警告“此单元格为只读”。

    image

    转载于:https://www.cnblogs.com/shadrach/p/5978676.html

    展开全文
  • C# 设置Excel 只读属性

    2021-06-23 09:46:07
    FileInfo f = new FileInfo(@"D:/xx.xls");//Excel文件所在的位置 if (f.Attributes.ToString().IndexOf("ReadOnly") != -1) { f.Attributes = FileAttributes.Normal; }
        FileInfo f = new FileInfo(@"D:/xx.xls");//Excel文件所在的位置 
                if (f.Attributes.ToString().IndexOf("ReadOnly") != -1) 
                { 
                    f.Attributes = FileAttributes.Normal; 
                } 

     

    展开全文
  • 用Python中openpyxl处理excel设置单元格格式

    万次阅读 多人点赞 2019-04-22 23:02:39
    #完整格式设置 #字体 ft = Font(name=u'微软雅黑', size=11, bold=True, italic=True,#斜体 vertAlign='baseline',#上下标'subscript','baseline'='none,'superscript' underline='single',#下划线'...
  • 2、解决1后未满足需求3,即在导出的Excel中直接编辑新行是提示写保(原因是Excel单元格默认是锁定状态,而保护工作表是保护的锁定的单元格),思路:直接操作列 3、解决2后,发现直接编辑新行时下拉框
  • ///清除所有行,列,合并单元格,扩展单元格,等 dataexcel1.Clear(); ///初始化默认行,列 dataexcel1.Init(); //获取行 通过GetRow函数获取行会自动创建行 IRow row = dataexcel1.G
  • JAVA直接操作excel

    2021-03-16 19:11:23
    /*** @Author:何云龙* @Version: 2012-11-16 下午03:45:16* @Description:*/import jxl.*;.../*** * java读取Excel表格,复制、更新Excel工作薄* */public class Test {public static void main(Stri...
  • easypoi设置单元格样式

    2020-12-29 08:14:11
    /***场景,假设现在要导出 学生成绩表的Excel文件*现在需要对其中 分数大于 90分 同时 小于95分 的同学 标记为 红色。*/@GetMapping(value ="/api/jncsCarFlow/ExportStudentScore")@ApiOperation(value ="导出检测...
  • openpyxl 设置合并单元格格式 excel

    千次阅读 2019-12-19 20:15:39
    请先看这位大佬的 ...然后在合并单元格部分,以下为官方文档代码 放这是努力方便各位找 >>> from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment >&...
  • java开发,需要实现一个功能:将excel进行加密。然后碰到问题。public static void main(String[] args) throws IOException, InvalidFormatException, GeneralSecurityException {POIFSFileSystem fs = new ...
  • 最近在做一个导入导出的功能,导出后,用户修改部分列的值,然后导入更新。为了能够进行更新,必须对...问题来了,单纯用 ProtectSheet 并不行,还得设置单元格样式IsLocked。 IWorkbook hssfworkbook = new HS...
  • //DataTable转换成Excel文档流,并保存到文件 //下载该excel文件至pc端 Session["FileFullPath"] = excelFullName; if (File.Exists(excelFullName)) { this.JSShowWindow("../../Handler/DownLoadFile.ashx", false...
  • Excel 单元格公式,以一个等号开始。通过公式,我们可以获取其它单元格的数据,并得出计算结果。 为单元格设置公式的方式与设置普通值是一样的。 import openpyxl wb = openpyxl.Workbook() sheet = wb.active ...
  •  把不需要保护的的单元格选定,单击右键-设置单元格,将保护标签中的锁定复选框清除,然后对该工作表设置保护。  此时,锁定的单元格只读的,刚才已被清除锁定复选框的单元则可以正常输入。 电脑公司xp...
  • Excel弹出“您试图更改的单元格或图表受保护,因而是只读的。若要修改受保护单元格或图表,请先使用‘撤消工作表保护’命令(在‘审阅’选项卡的‘更改’组中)来取消保护。可能会提示您输入密码。”窗口,出现这种...
  • 要求通过系统下载的Excel都带上公司的水印,列宽调整为合适的宽度,并且设置为不可编辑,即只读。 即: 1:加水印; 2:调整列宽将单元格内容显示全; 3:设置只读; 解决方案思路介绍: 三点需求比较来说,以...
  • xlwt甚至不支持07版本以后的excel,这个格式excel文件一般来说,最大只能支持256列或者65536行的excel文件。 对于大数据 xlwt库保存大数据时报错:Exception: String longer than 32767 characters 面...
  • Excel VBA:设置单元格边框

    千次阅读 2020-01-01 22:25:38
    下例设置单元格区域 A1:G1 的底部边框的颜色。 Worksheets("Sheet1").Range("A1:G1"). _ Borders(xlEdgeBottom).Color = RGB(255, 0, 0) Index 可为以下 XlBordersIndex 常量之一: xlDiagonalDown 、 ...
  • java 读取excel设置各列数据的类型

    千次阅读 2021-02-25 19:55:25
    … … … …try{//构建Workbook对象32313133353236313431303231363533e4b893e5b19e31333363363534, 只读Workbook对象//直接从本地文件创建Workbook//从输入流创建WorkbookInputStream is = new FileInputStre...
  • POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 首先下载POI jar包,地址:http://pan.baidu.com/s/11YM3k 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = w...
  • 可以使用方法java.io.File.setReadOnOn()将文件设置只读。此方法不需要任何参数,如果文件设置只读,则返回true,否则返回false。方法java.io.File.canWrite()用于检查文件是否可以用Java写入,如果不能,则确认...
  • 百度 GOOGLE都没有找到C#来控制Exel只读
  • 对于一些重要的Excel文件,只供特殊人员查看、编辑或者防止重要数据对外泄露时,就需要设置文档保护,包括设置访问密码、设置文件只读等操作。本篇文章将介绍如何使用C#来设置Excel工作簿和工作表的保护,示例内容...
  • excel单元格中写一个数字很简单,但是如何写进多个有格式的数据呢,假如我们想写入一个点坐标:(56,25) 解决思路 可以先将数据强制格式format 转换为特定格式的字符串,然后以写字符串的方式写入excel中。 关键...
  • POI 生成Excel表格 设置单元格保护

    千次阅读 2014-05-15 14:54:04
    HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("测试锁定单元格"); //1.设置Sheet保护 sheet.protectSheet("123");...HSSFCellStyle cellstyle = wb....设置单元格是否锁定 cellstyl
  • 如上数据,直接保存的EXCEL中也是有值的,就是worksheet.Cells["C1"].DoubleValue;获取不到值,这是为什么呢,有没有大神解读下,上面注释代码为测试代码直接读取也是不行的。 public static double XIRR(IList...
  • js获取本地excel文件单元格的内容

    千次阅读 2019-08-13 10:26:11
    // 只读了第一张表 } } console.log(persons); }; // 以二进制方式打开文件 fileReader.readAsBinaryString(files[0]); });  ok可以了,说一下那两个文件一个是jq,一个是插件js,应该都能找的到,当然...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,573
精华内容 2,229
关键字:

如何设置excel单元格只读