精华内容
下载资源
问答
  • 1、某一列 、某一行或某些单元格不可编辑,其他列可以编辑 二、期间遇到的问题 1、无法设置成不可编辑 2、设置为不可编辑,导出后发现所有单元格均不可编辑; 原因:createCell();创建单元格后,单元格默认是锁定...

    一、需求:

    1、某一列 、某一行或某些单元格不可编辑,其他列可以编辑

    二、期间遇到的问题

    1、无法设置成不可编辑

    2、设置为不可编辑,导出后发现所有单元格均不可编辑;

    原因:createCell();创建单元格后,单元格默认是锁定状态;protectSheet(“密码”);保护工作表是保护所有锁定的单元格;
    解决:创建不需要保护的列设置为 unlockStyle.setLocked(false);//设置未锁定

    三、解决问题

       不多BB,直接上代码
    

    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet(“sheet名称”);

        HSSFCellStyle lockstyle = wb.createCellStyle();
        lockstyle.setLocked(true);//设置锁定
        lockstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        lockstyle.setFillForegroundColor(IndexedColors.RED.getIndex());//设置上锁的单元格背景色
        
        HSSFCellStyle unlockStyle=wb.createCellStyle();
        unlockStyle.setLocked(false);//设置未锁定
        
        
        for(int i=0;i<10;i++){
             HSSFRow row = sheet.createRow(i);
             for (int j = 0; j < 10; j++) {
                 HSSFCell cell = row.createCell(j);
                 cell.setCellStyle(unlockStyle);//默认是锁定状态;将所有单元格设置为:未锁定;然后再对需要上锁的单元格单独锁定
                 if(j==1){//这里可以根据需要进行判断;我这就将第2列上锁了
                     cell.setCellStyle(lockstyle);//将需要上锁的单元格进行锁定
                     cell.setCellValue("上锁了");
                 }else{
                     cell.setCellValue("没上锁了");
                 }
            }
        }
        //sheet添加保护,这个一定要否则光锁定还是可以编辑的
        sheet.protectSheet("123456");
        FileOutputStream os = new FileOutputStream("D:\\workbook.xls");
        wb.write(os);
        os.close();
    

    四:结果

    技术分享图片

    技术分享图片
    原文:http://www.bubuko.com/infodetail-2896152.html

    展开全文
  • // 先进行状态设置 HSSFCellStyle lockstyle = wb.createCellStyle(); lockstyle.setLocked(true);//设置锁定 HSSFCellStyle unlockStyle=wb.createCellStyle(); unlockStyle.setLocked(false);...
    // 先进行状态设置
    HSSFCellStyle lockstyle = wb.createCellStyle();
            lockstyle.setLocked(true);//设置锁定
            HSSFCellStyle unlockStyle=wb.createCellStyle();
            unlockStyle.setLocked(false);//设置未锁定
    
    //对行和列进行循环判断,对想要锁定的列进行设置
    cell.setCellStyle(unlockStyle);//默认是锁定状态;将所有单元格设置为:未锁定;然后再对需要上锁的单元格单独锁定
                    if(j==0){//这里可以根据需要进行判断;我这就将第1列上锁了
                        cell.setCellStyle(lockstyle);//将需要上锁的单元格进行锁定
                        cell.setCellValue(value.toString());
                    }else{
                        cell.setCellValue(value.toString());
                    }
    
    //最后再进行密码设置,否则不会生效
    // 在sheet里创建表头下的数据
            sheet.protectSheet("123456");
    
    展开全文
  • 中文名: 别说你懂Excel:500招玩转Excel表格与数据处理(附完整光盘数据) 作者: 前沿文化图书fenlei: 软件 资源格式: PDF 版本: 扫描版 出版社: 科学出版社书号: 9787030371782发行时间: 2013年05月 地区: 大陆 语言:...
  • excel表格快捷键

    2011-02-27 15:58:00
    Excel 快捷键和功能键Ctrl 组合快捷键按键说明Ctrl+( 取消隐藏选定范围内所有隐藏的行。Ctrl+) 取消隐藏选定范围内所有隐藏的列。Ctrl+& 将外框应用于选定单元格。Ctrl+_ 从选定单元格删除外框。Ctrl+~ 应用“常规”...

    Excel 快捷键和功能键

    Ctrl 组合快捷键

     

    按键 说明

    Ctrl+( 取消隐藏选定范围内所有隐藏的行。

    Ctrl+) 取消隐藏选定范围内所有隐藏的列。

    Ctrl+& 将外框应用于选定单元格。

    Ctrl+_ 从选定单元格删除外框。

    Ctrl+~ 应用常规数字格式。

    Ctrl+$ 应用带有两位小数的货币格式(负数放在括号中)。

    Ctrl+% 应用不带小数位的百分比格式。

    Ctrl+^ 应用带有两位小数的指数格式。

    Ctrl+# 应用带有日、月和年的日期格式。

    Ctrl+@ 应用带有小时和分钟以及 AM PM 时间格式。

    Ctrl+! 应用带有两位小数、千位分隔符和减号 (-)(用于负值)的数值格式。

    Ctrl+- 显示用于删除选定单元格的删除对话框。

    Ctrl+* 选择环绕活动单元格的当前区域(由空白行和空白列围起的数据区域)。

    在数据透视表中,它将选择整个数据透视表。

     

    Ctrl+: 输入当前时间。

    Ctrl+; 输入当前日期。

    Ctrl+` 在工作表中切换显示单元格值和公式。

    Ctrl+' 将公式从活动单元格上方的单元格复制到单元格或编辑栏中。

    Ctrl+" 将值从活动单元格上方的单元格复制到单元格或编辑栏中。

    Ctrl++ 显示用于插入空白单元格的插入对话框。

    Ctrl+1 显示单元格格式对话框。

    Ctrl+2 应用或取消加粗格式设置。

    Ctrl+3 应用或取消倾斜格式设置。

    Ctrl+4 应用或取消下划线。

    Ctrl+5 应用或取消删除线。

    Ctrl+6 在隐藏对象、显示对象和显示对象占位符之间切换。

    Ctrl+7 显示或隐藏常用工具栏。

    Ctrl+8 显示或隐藏大纲符号。

    Ctrl+9 隐藏选定的行。

    Ctrl+0 隐藏选定的列。

    Ctrl+A 选择整个工作表。

    如果工作表包含数据,则按 Ctrl+A 将选择当前区域。再次按 Ctrl+A 将选择整个工作表。

     

    当插入点位于公式中某个函数名称的右边时,则会显示函数参数对话框。

     

    当插入点位于公式中某个函数名称的右边时,按 Ctrl+Shift+A 将会插入参数名称和括号。

     

    Ctrl+B 应用或取消加粗格式设置。

    Ctrl+C 复制选定的单元格。

    如果连续按两次 Ctrl+C,则会显示 Microsoft Office 剪贴板。

    如果工作表包含数据,则按 Ctrl+A 将选择当前区域。再次按 Ctrl+A 将选择整个工作表。

     

    当插入点位于公式中某个函数名称的右边时,则会显示函数参数对话框。

     

    当插入点位于公式中某个函数名称的右边时,按 Ctrl+Shift+A 将会插入参数名称和括号。

     

    Ctrl+B 应用或取消加粗格式设置。

    Ctrl+C 复制选定的单元格。

    如果连续按两次 Ctrl+C,则会显示 Microsoft Office 剪贴板。

     

    Ctrl+D 使用向下填充命令将选定范围内最顶层单元格的内容和格式复制到下面的单元格中。

    Ctrl+F 显示查找对话框。

    Shift+F5 也会显示此对话框,而按 Shift+F4 则会重复上一次查找操作。

     

    Ctrl+G 显示定位对话框。

    F5 也会显示此对话框。

     

    Ctrl+H 显示查找和替换对话框。

    Ctrl+I 应用或取消倾斜格式设置。

    Ctrl+K 为新的超链接显示插入超链接对话框,或为选定的现有超链接显示编辑超链接对话框。

    Ctrl+L 显示创建列表对话框。

    Ctrl+N 创建一个新的空白文件。

    Ctrl+O 显示打开对话框以打开或查找文件。

    Ctrl+Shift+O 可选择所有包含批注的单元格。

     

    Ctrl+P 显示打印对话框。

    Ctrl+R 使用向右填充命令将选定范围最左边单元格的内容和格式复制到右边的单元格中。

    Ctrl+S 使用其当前文件名、位置和文件格式保存活动文件。

    Ctrl+U 应用或取消下划线。

    Ctrl+V 在插入点处插入剪贴板的内容,并替换任何选定内容。只有在剪切或复制了对象、文本或单元格内容后,才能使用此快捷键。

    Ctrl+W 关闭选定的工作簿窗口。

    Ctrl+X 剪切选定的单元格。

    Ctrl+Y 重复上一个命令或操作(如有可能)。

    Ctrl+Z 使用撤消命令来撤消上一个命令或删除最后键入的条目。

    显示了自动更正智能标记时,按 Ctrl+Shift+Z 可使用撤消重复命令撤消或恢复上一次自动更正操作。

     

     

    功能键

     

    按键 说明

    F1 显示帮助任务窗格。

    Ctrl+F1 可关闭并重新打开当前任务窗格。

     

    Alt+F1 可创建当前范围中数据的图表。

     

    Alt+Shift+F1 可插入新的工作表。

     

    F2 编辑活动单元格并将插入点放在单元格内容的结尾。如果禁止在单元格中进行编辑,它也会将插入点移到编辑栏中。

    Shift+F2 可编辑单元格批注。

     

    F3 将定义的名称粘贴到公式中。

    Shift+F3 将显示插入函数对话框。

     

    F4 重复上一个命令或操作(如有可能)。

    Ctrl+F4 可关闭选定的工作簿窗口。

     

    F5 显示定位对话框。

    Ctrl+F5 可恢复选定工作簿窗口的窗口大小。

     

    F6 切换到已拆分(窗口菜单,拆分命令)的工作表中的下一个窗格。

    Shift+F6 可切换到已拆分的工作表中的上一个窗格。

     

    如果打开了多个工作簿窗口,则按 Ctrl+F6 可切换到下一个工作簿窗口。

     

    F7 显示拼写检查对话框,以检查活动工作表或选定范围中的拼写。

    如果工作簿窗口未最大化,则按 Ctrl+F7 可对该窗口执行移动命令。使用箭头键移动窗口,并在完成时按 Esc

     

    F8 打开或关闭扩展模式。在扩展模式中,“EXT”将出现在状态行中,并且按箭头键可扩展选定范围。

    通过按 Shift+F8,您可以使用箭头键将非邻近单元格或范围添加到单元格的选定范围。

     

    当工作簿未最大化时,按 Ctrl+F8 可执行大小命令(在工作簿窗口的控制菜单上。

     

    Alt+F8 可显示用于运行、编辑或删除宏的对话框。

     

    F9 计算所有打开的工作簿中的所有工作表。

    如果先按 F9 再按 Enter(对于数组公式则按 Ctrl+Shift+Enter),则会计算选定的公式部分,并将选定部分替换为计算出的值。

     

    Shift+F9 可计算活动工作表。

     

    Ctrl+Alt+F9 可计算所有打开的工作簿中的所有工作表,不管它们自上次计算以来是否已更改。

     

    如果按 Ctrl+Alt+Shift+F9,则会重新检查相关公式,然后计算所有打开的工作簿中的所有单元格,其中包括未标记为需要计算的单元格。

     

    Ctrl+F9 可将工作簿窗口最小化为图标。

     

    F10 选择菜单栏或同时关闭打开的菜单和子菜单。

    Shift+F10 可显示选定项目的快捷菜单。

     

    Alt+Shift+F10 可显示智能标记的菜单或消息。如果存在多个智能标记,按该组合键可切换到下一个智能标记并显示其菜单或消息。

     

    Ctrl+F10 可最大化或还原选定的工作簿窗口。

     

    F11 创建当前范围内数据的图表。

    Shift+F11 可插入一个新工作表。

     

    Alt+F11 将打开 Visual Basic 编辑器,您可以在其中通过使用 Visual Basic for Applications (VBA) 来创建宏。

     

    Alt+Shift+F11 将打开 Microsoft 脚本编辑器,您可以在其中添加文本、编辑 HTML 标记以及修改任何脚本代码。

     

    F12 显示另存为对话框。

     

    其他有用的快捷键

     

    按键 说明

    箭头键 在工作表中上移、下移、左移或右移一个单元格。

    Ctrl+箭头键可移动到工作表中当前数据区域 (数据区域:包含数据的单元格区域,该区域周围为空白单元格或数据表边框。)的边缘。

     

    Shift+箭头键可将单元格的选定范围扩大一个单元格。

     

    Ctrl+Shift+箭头键可将单元格的选定范围扩展到与活动单元格同一列或同一行中的最后一个非空白单元格。

     

    当菜单处于可见状态时,按向左键或向右键可选择左边或右边的菜单。当子菜单处于打开状态时,按这些箭头键可在主菜单和子菜单之间切换。

     

    当菜单或子菜单处于打开状态时,按向下键或向上键可选择下一个或上一个命令。

     

    在对话框中,按箭头键可在打开的下拉列表中的各个选项之间移动,或在一组选项的各个选项之间移动。

     

    Alt+向下键可打开选定的下拉列表。

     

    Backspace 在编辑栏中删除左边的一个字符。

    也可清除活动单元格的内容。

     

    Delete 从选定单元格中删除单元格内容(数据和公式),而不会影响单元格格式或批注。

    在单元格编辑模式下,按该键将会删除插入点右边的字符。

     

    End Scroll Lock 处于开启状态时,移动到窗口右下角的单元格。

    当菜单或子菜单处于可见状态时,也可选择菜单上的最后一个命令。

     

    Ctrl+End 可移动到工作表上的最后一个单元格,即所使用的最下方一行与所使用的最右边一列的交汇单元格。

     

    Ctrl+Shift+End 可将单元格的选定范围扩展到工作表上所使用的最后一个单元格(右下角)。

     

    Enter 从单元格或编辑栏中完成单元格输入,并(默认)选择下面的单元格。

    在数据表单中,按该键可移动到下一条记录中的第一个字段。

     

    打开选定的菜单(按 F10 激活菜单栏),或执行选定命令的操作。

     

    在对话框中,按该键可执行对话框中默认命令按钮(带有突出轮廓的按钮,通常为确定按钮)的操作。

     

    Alt+Enter 可在同一单元格中另起一个新行。

     

    Ctrl+Enter 可使用当前条目填充选定的单元格区域。

     

    Shift+Enter 可完成单元格输入并选择上面的单元格。

     

    Esc 取消单元格或编辑栏中的输入。

    按该键也可关闭打开的菜单或子菜单、对话框或消息窗口。

     

    Home 移到工作表中某一行的开头。

    Scroll Lock 处于开启状态时,移到窗口左上角的单元格。

     

    当菜单或子菜单处于可见状态时,选择菜单上的第一个命令。

     

    Ctrl+Home 可移到工作表的开头。

     

    Ctrl+Shift+Home 可将单元格的选定范围扩展到工作表的开头。

     

    Page Down 在工作表中下移一个屏幕。

    Alt+Page Down 可在工作表中向右移动一个屏幕。

     

    Ctrl+Page Down 可移到工作簿中的下一个工作表。

     

    Ctrl+Shift+Page Down 可选择工作簿中的当前和下一个工作表。

     

    Page Up 在工作表中上移一个屏幕。

    Alt+Page Up 可在工作表中向左移动一个屏幕。

     

    Ctrl+Page Up 可移到工作簿中的上一个工作表。

     

    Ctrl+Shift+Page Up 可选择工作簿中的当前和上一个工作表。

     

    空格键 在对话框中,执行选定按钮的操作,或者选中或清除复选框。

    Ctrl+空格键可选择工作表中的整列。

     

    Shift+空格键可选择工作表中的整行。

     

    Ctrl+Shift+空格键可选择整个工作表。

     

    如果工作表包含数据,则按 Ctrl+Shift+空格键将选择当前区域。再按一次 Ctrl+Shift+空格键将选择整个工作表。

    当某个对象处于选定状态时,按 Ctrl+Shift+空格键可选择工作表上的所有对象。

    Alt+空格键可显示 Excel 窗口的控制菜单。

     

    Tab 在工作表中向右移动一个单元格。

    在受保护的工作表中,可在未锁定的单元格之间移动。

     

    在对话框中,移到下一个选项或选项组。

     

    Shift+Tab 可移到前一个单元格(在工作表中)或前一个选项(在对话框中)。

     

    在对话框中,按 Ctrl+Tab 可切换到下一个选项卡。

     

    在对话框中,按 Ctrl+Shift+Tab 可切换到前一个选项卡。

    展开全文
  • IOS-Excel表格制作

    千次阅读 2015-09-20 15:51:22
    // 禁止上边框离开屏幕边缘 y = y > contentHeight ? y : contentHeight; } } // 下移动 else { // 画布高度低于屏幕高度 if (contentHeight ) { // 禁止下边框离开屏幕边缘 y = y ; } } // 左移动...
    仿照UITableView、UITableViewDataSource和UITableViewDelegate,支持自定义每一个小框内的视图。

    视图:HJExcelView.h

    //
    //  HJExcelView.h
    //  mehr 工作表
    //
    //  Created by 阳君 on 14-6-9.
    //  Copyright (c) 2014年 Hjsj. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    #import "HJExcelViewCell.h"
    
    @protocol HJExcelViewViewDelegate, HJExcelViewViewDataSource;
    
    
    @interface HJExcelView : UIView <HJExcelViewViewCellDelegate>
    
    /** 数据源代理*/
    @property (nonatomic, assign) id <HJExcelViewViewDataSource> dataSource;
    /** 界面代理*/
    @property (nonatomic, assign) id <HJExcelViewViewDelegate>   delegate;
    
    /** 边框颜色*/
    @property (nonatomic, strong) UIColor *borderColor;
    /** 边框大小(>0才有效果,默认为1.0)*/
    @property (nonatomic)         CGFloat borderWidth;
    
    /** cell到边框的间隙*/
    @property (nonatomic) CGFloat  cellToBordeSpace;
    
    /**
     *  刷新全部数据
     *
     *  @return void
     */
    - (void)reloadData;
    
    @end
    
    
    @protocol HJExcelViewViewDelegate <NSObject>
    
    @optional
    
    /**
     *  点击cell
     *
     *  @param excelView HJExcelView
     *  @param indexPath 位置
     *
     *  @return void
     */
    - (void)excelView:(HJExcelView *)excelView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
    
    /**
     *  cell的行高,默认40,包含了borderWidth/2
     *
     *  @param excelView HJExcelView
     *  @param row       行
     *
     *  @return CGFloat
     */
    - (CGFloat)excelView:(HJExcelView *)excelView heightForRow:(NSInteger)row;
    
    /**
     *  cell的列宽,默认:60,包含了borderWidth/2
     *
     *  @param excelView HJExcelView
     *  @param section   列
     *
     *  @return CGFloat
     */
    - (CGFloat)excelView:(HJExcelView *)excelView widthInSection:(NSInteger)section;
    
    @end
    
    
    @protocol HJExcelViewViewDataSource <NSObject>
    
    @required
    
    /**
     *  有多少行数据
     *
     *  @param excelView HJExcelView
     *
     *  @return NSInteger
     */
    - (NSInteger)numberOfRowsInExcelView:(HJExcelView *)excelView;
    
    /**
     *  有多少列数据
     *
     *  @param excelView HJExcelView
     *
     *  @return NSInteger
     */
    - (NSInteger)numberOfSectionsInExcelView:(HJExcelView *)excelView;
    
    /**
     *  生成cell
     *
     *  @param cell      已初始化的HJExcelViewCell
     *  @param indexPath 位置
     *
     *  @return HJExcelViewCell
     */
    - (HJExcelViewCell *)excelViewCell:(HJExcelViewCell *)cell cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    @end

    实现:HJExcelView.m

     //
    //  HJExcelView.m
    //  mehr
    //
    //  Created by 阳君 on 14-6-9.
    //  Copyright (c) 2014年 Hjsj. All rights reserved.
    //
    
    #import "HJExcelView.h"
    #import "HJExcelViewPoint.h"
    
    @interface HJExcelView ()
    {
    @private
        /** 画版*/
        UIView *_boardView;
        /** 画布*/
        UIView *_contentView;
        
        /** 行列坐标点*/
        NSMutableArray *_cellRowArray, *_cellSectionArray;
    }
    
    @end
    
    
    @implementation HJExcelView
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            _boardView = [[UIView alloc] initWithFrame:self.frame];
            [self addSubview:_boardView];
            // 手势操作
            // 移动
            UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
            [_boardView addGestureRecognizer:panRecognizer];
        }
        return self;
    }
    
    #pragma mark  - 图形移动
    - (void)handlePan:(UIPanGestureRecognizer *)recognizer
    {
        // 取点
        CGPoint translatedPoint = [recognizer translationInView:_boardView];
        // 计算
        CGFloat x = recognizer.view.center.x + translatedPoint.x;
        CGFloat y = recognizer.view.center.y + translatedPoint.y;
        
        // 移动范围
        CGFloat contentWidth  = _contentView.frame.size.width / 2;
        CGFloat contentHeight = _contentView.frame.size.height / 2;
        CGFloat mainWidth  = self.frame.size.width / 2;
        CGFloat mainHeight = self.frame.size.height / 2;
    
        // 上移动
        if (translatedPoint.y < 0)
        {
            // 画布高度低于屏幕高度
            if (contentHeight < mainHeight)
            {
                // 禁止上边框离开屏幕边缘
                y = y > contentHeight ? y : contentHeight;
            }
        }
        // 下移动
        else
        {
            // 画布高度低于屏幕高度
            if (contentHeight < mainHeight)
            {
                // 禁止下边框离开屏幕边缘
                y = y < self.frame.size.height - contentHeight ? y : self.frame.size.height - contentHeight;
            }
        }
        
        // 左移动
        if (translatedPoint.x < 0)
        {
            // 画布高度低于屏幕高度
            if (contentWidth < mainWidth)
            {
                // 禁止左边框离开屏幕边缘
                x = x > contentWidth ? x : contentWidth;
            }
    
        }
        // 右移动
        else
        {
            if (contentWidth < mainWidth)
            {
                // 禁止右边框离开屏幕边缘
                x = x < self.frame.size.width - contentWidth ? x : self.frame.size.width - contentWidth;
            }
            
        }
        
        // 移动
        recognizer.view.center = CGPointMake(x, y);
        
        // 回归中心点
        [recognizer setTranslation:CGPointMake(0, 0) inView:_boardView];
    }
    
    #pragma mark - 获得边框颜色
    - (UIColor *)borderColor
    {
        // 是否设置为默认
        _borderColor = _borderColor ? _borderColor : [UIColor colorWithWhite:0.821 alpha:1.000];
        
        return _borderColor;
    }
    
    #pragma mark 获得边框大小
    - (CGFloat)borderWidth
    {
        // 是否设置为默认
        _borderWidth = _borderWidth > 0 ? _borderWidth : 1.0;
        
        return _borderWidth;
    }
    
    #pragma mark - 刷新数据
    - (void)reloadData
    {
        // 必须实现的代理方法
        if ([self.dataSource respondsToSelector:@selector(numberOfSectionsInExcelView:)] && [self.dataSource respondsToSelector:@selector(numberOfRowsInExcelView:)] && [self.dataSource respondsToSelector:@selector(excelViewCell:cellForRowAtIndexPath:)])
        {
            // 清空上次的画布
            [_contentView removeFromSuperview];
            _contentView = [[UIView alloc] initWithFrame:self.frame];
            [_boardView addSubview:_contentView];
            
            // 行
            NSInteger rows = [self.dataSource numberOfRowsInExcelView:self];
            // 列
            NSInteger sections = [self.dataSource numberOfSectionsInExcelView:self];
           
            CGFloat borderWidth = self.borderWidth / 2;
            
            // cell的大小位置
            CGRect frame = CGRectMake(borderWidth + self.cellToBordeSpace * 2, borderWidth + self.cellToBordeSpace * 2, 0, 0);
            
            _cellRowArray     = [NSMutableArray array];
            _cellSectionArray = [NSMutableArray array];
            
            NSInteger sumHeight = 0, sumWidth = 0;
            
            // 行操作
            for (int row = 0; row < rows; row ++ )
            {
                // 行高
                frame.size.height = [self heightForRow:row];
                // 保存行点
                HJExcelViewPoint *point = [HJExcelViewPoint excelViewPointWithX:frame.origin.x y:frame.origin.y];
                [_cellRowArray addObject:point];
                
                // 列操作
                for (int section = 0; section < sections; section ++ )
                {
                    // 列宽
                    frame.size.width = [self widthInSection:section];
                    // 位置
                     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
                    
                     [self addExcelViewCellWithIndexPath:indexPath frame:frame];
                    
                    if (row == 0)
                    {
                        // 保存列点
                        HJExcelViewPoint *point = [HJExcelViewPoint excelViewPointWithX:frame.origin.x y:frame.origin.y];
                        [_cellSectionArray addObject:point];
                    }
                    // 下一列位置
                    frame.origin.x += frame.size.width + self.cellToBordeSpace * 2;
                }
                
                // 下一行第0个位置
                frame.origin.y += frame.size.height + self.cellToBordeSpace * 2;
                // 当出现最后一个点时,保存长度
                if (row == rows - 1)
                {
                    sumHeight = frame.origin.y;
                    sumWidth = frame.origin.x;
                }
                frame.origin.x = self.borderWidth / 2 + self.cellToBordeSpace * 2;
            }
            
            // 画边框
            HJExcelViewPoint *point;
            UIView *line;
            
            sumHeight -= self.cellToBordeSpace * 2;
            sumWidth  -= self.cellToBordeSpace * 2;
            
            // 画行
            for (int row = 0; row < rows; row ++ )
            {
                point = [_cellRowArray objectAtIndex:row];
                line = [[UIView alloc] initWithFrame:CGRectMake(point.x - borderWidth - self.cellToBordeSpace, point.y - borderWidth - self.cellToBordeSpace, sumWidth, self.borderWidth)];
                line.backgroundColor = self.borderColor;
                [_contentView addSubview:line];
            }
    
            // 画最后一行
            line = [[UIView alloc] initWithFrame:CGRectMake(point.x - borderWidth - self.cellToBordeSpace, sumHeight - borderWidth + self.cellToBordeSpace, sumWidth, self.borderWidth)];
            line.backgroundColor = self.borderColor;
            [_contentView addSubview:line];
            
            // 画列
            for (int section = 0; section < sections; section ++ )
            {
                point = [_cellSectionArray objectAtIndex:section];
                line = [[UIView alloc] initWithFrame:CGRectMake(point.x - borderWidth - self.cellToBordeSpace, point.y - borderWidth - self.cellToBordeSpace, self.borderWidth, sumHeight)];
                line.backgroundColor = self.borderColor;
                [_contentView addSubview:line];
            }
            // 画最后一列
            line = [[UIView alloc] initWithFrame:CGRectMake(sumWidth - borderWidth + self.cellToBordeSpace, point.y - borderWidth - self.cellToBordeSpace, self.borderWidth, sumHeight)];
            line.backgroundColor = self.borderColor;
            [_contentView addSubview:line];
            
            // 调整画板
            frame = _boardView.frame;
            frame.origin.x = - self.frame.size.width / 2;
            frame.origin.y = - self.frame.size.height / 2;
            frame.size.height = self.borderWidth + self.cellToBordeSpace + sumHeight + self.frame.size.height;
            frame.size.width  = self.borderWidth + self.cellToBordeSpace + sumWidth + self.frame.size.width;
            _boardView.frame = frame;
            
            // 调整画布
            frame = _contentView.frame;
            frame.origin.x = self.frame.size.width / 2;
            frame.origin.y = self.frame.size.height / 2;
            frame.size.height = self.borderWidth + self.cellToBordeSpace + sumHeight;
            frame.size.width  = self.borderWidth + self.cellToBordeSpace + sumWidth;
            _contentView.frame = frame;
        }
        
    }
    
    #pragma mark - cell的行高
    - (CGFloat)heightForRow:(NSInteger)row
    {
        if ([self.delegate respondsToSelector:@selector(excelView:heightForRow:)])
        {
            return [self.delegate excelView:self heightForRow:row];
        }
        else
        {
            return 44;
        }
    }
    
    #pragma mark cell的列宽
    - (CGFloat)widthInSection:(NSInteger)section
    {
        if ([self.delegate respondsToSelector:@selector(excelView:heightForRow:)])
        {
            return [self.delegate excelView:self widthInSection:section];
        }
        else
        {
            return 70;
        }
    }
    
    #pragma mark - 视图增加cell
    - (void)addExcelViewCellWithIndexPath:(NSIndexPath *)indexPath frame:(CGRect)frame
    {
        // 初始化cell
        HJExcelViewCell *cell = [[HJExcelViewCell alloc] initWithFrame:frame];
        // 通知主视图向cell中添加内容
        cell = [self.dataSource excelViewCell:cell cellForRowAtIndexPath:indexPath];
        // 调整大小
        cell.frame = frame;
        // 绑定位置
        cell.indexPath = indexPath;
        // 代理
        cell.excelViewDelegate = self;
        //  加到页面中
        [_contentView addSubview:cell];
    
    }
    
    #pragma mark - HJExcelViewViewCellDelegate
    - (void)excelViewCell:(HJExcelViewCell *)excelViewCell didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 判断是否开启可点击和实现回调
        if (excelViewCell.selected && [self.delegate respondsToSelector:@selector(excelView:didSelectRowAtIndexPath:)])
        {
            // 通知主视图,被点击
            [self.delegate excelView:self didSelectRowAtIndexPath:excelViewCell.indexPath];
        }
    }
    
    @end

    每一个cell:HJExcelViewCell.h

    //
    //  HJExcelViewCell.h
    //  mehr
    //
    //  Created by 阳君 on 14-6-10.
    //  Copyright (c) 2014年 Hjsj. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @protocol HJExcelViewViewCellDelegate;
    
    @interface HJExcelViewCell : UIView
    
    /** 是否可选,默认no关闭*/
    @property (nonatomic) BOOL selected;
    
    //以下属性,和HJExcelView通信,外部调用无用
    /** 位置*/
    @property (nonatomic, strong) NSIndexPath *indexPath;
    @property (nonatomic, assign) id <HJExcelViewViewCellDelegate> excelViewDelegate;
    
    @end
    
    
    
    
    // 和HJExcelView通信,外部不用实现
    @protocol HJExcelViewViewCellDelegate <NSObject>
    
    @optional
    
    /**
     *  点击cell
     *
     *  @param excelViewCell HJExcelViewCell
     *  @param indexPath 位置
     *
     *  @return void
     */
    - (void)excelViewCell:(HJExcelViewCell *)excelViewCell didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
    
    @end

    实现:HJExcelViewCell.m

    //
    //  HJExcelViewCell.m
    //  mehr
    //
    //  Created by 阳君 on 14-6-10.
    //  Copyright (c) 2014年 Hjsj. All rights reserved.
    //
    
    #import "HJExcelViewCell.h"
    
    @implementation HJExcelViewCell
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code
        }
        return self;
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self.excelViewDelegate excelViewCell:self didSelectRowAtIndexPath:self.indexPath];
    }
    
    @end


    位置点:HJExcelViewPoint.h 

    //
    //  HJExcelViewPoint.h
    //  mehr
    //
    //  Created by 阳君 on 14-6-10.
    //  Copyright (c) 2014年 Hjsj. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface HJExcelViewPoint : NSObject
    
    /** 坐标x*/
    @property (nonatomic) CGFloat x;
    /** 坐标y*/
    @property (nonatomic) CGFloat y;
    
    /**
     *  生成坐标
     *
     *  @param x x
     *  @param y y
     *
     *  @return HJExcelViewPoint
     */
    + (id)excelViewPointWithX:(CGFloat)x y:(CGFloat)y;
    
    @end


    实现:HJExcelViewPoint.m 

    //
    //  HJExcelViewPoint.m
    //  mehr
    //
    //  Created by 阳君 on 14-6-10.
    //  Copyright (c) 2014年 Hjsj. All rights reserved.
    //
    
    #import "HJExcelViewPoint.h"
    
    @implementation HJExcelViewPoint
    
    + (id)excelViewPointWithX:(CGFloat)x y:(CGFloat)y
    {
        HJExcelViewPoint *point = [[[self class] alloc] init];
        
        point.x = x;
        point.y = y;
        
        return point;
    }
    
    @end

    展开全文
  • EXCEL表格所有的快捷键

    千次阅读 2019-08-15 16:56:36
    如果禁止在单元格中进行编辑,它也会将插入点移到编辑栏中。 按【Shift】+【F2】可编辑单元格批注。 【F3】 将定义的名称粘贴到公式中。 按【Shift】+【F3】将显示【插入函数】对话框。 【F4】 重复上一个...
  • Asp.Net 导入Excel表格

    2015-07-13 16:46:00
    Asp.Net 导入Excel表格 前台页面: <div align="center" style="background-color:Beige"> <table style="width: 576px; border-collapse: separate; text-align: center"> <...
  • 中文名: 别说你懂Excel:500招玩转Excel表格与数据处理(附完整光盘数据) 作者: 前沿文化图书fenlei: 软件 资源格式: PDF 版本: 扫描版 出版社: 科学出版社书号: 9787030371782发行时间: 2013年05月 地区: 大陆 语言:...
  • excel表格计算器快捷键excel表格计算器快捷键篇一:excel表格的快捷键使用大全Excel 快捷键和功能键Ctrl 组合快捷键按键 说明Ctrl+( 取消隐藏选定范围内所有隐藏的行。Ctrl+) 取消隐藏选定范围内所有隐藏的列。Ctrl+...
  • python写多个数据到excel表格的一个单元格中 往excel单元格中写一个数字很简单,但是如何写进多个有格式的数据呢,假如我们想写入一个点坐标:(56,25) 解决思路 可以先将数据强制格式format 转换为特定格式的字符...
  • Excel中如何禁止用户编辑或修改某些特定区域?您必须安装 Windows 2000 或更高版本并且机位于域中才能授予特定用户访问区。在“工具”菜单上,指向“保护”,再单击“允许用户编辑区域”(该命令仅在工作表未受保护时...
  • 原文地址:... 1.安装 1>composer 安装 "maatwebsite/excel": "~2.1.0" 2>app/config/app.php,添加服务 Maatwebsite\Excel\ExcelServiceProvider::class 设置F...
  • 本来从MSFlexGrid或MSHFlexGrid导出数据到Excel中,是一个非常简单...运度速度得到了极大提升,需要的朋友可以参照以下代码,稍作修改,就可以写出用于其它表格控件向Excel导出数据的功能了。 代码如下: Pu...
  • 本文经机器之心授权转载,禁止二次转载(微信公众号:almosthuman2014)参与:思源、张倩很多开发者说自从有了 Python/Pandas,Excel 都不怎么用...
  • 109. 将WORD中的内容作为图片链接插入EXCEL表格中 61 110. 在独立的窗口中处理内嵌式图表 62 111. 在图表中显示隐藏数据 62 112. 在图表中增加文本框 63 113. 建立文本与图表文本框的链接 63 114. 给图表增加新数据...
  • 求代码高手指导,怎么用java写代码实现控制Excel锁定保护区域可以插入行列,而且插入的行列是没有锁定的,就是锁定区域的内容可以复制粘贴进新插入的行列里面! 求高手指导,我是利用的poi,谢谢!
  • Handsontable是使用Excel一样的外观数据网格组件。建在JavaScript中,它与最高效率的任何数据源的集成。它配备了强大的功能,如数据验证,排序,分组,数据绑定,公式支持或列顺序。官网主页,给出了一个10万个...
  • EXCEL电子表格使用技巧

    千次阅读 2012-02-28 16:04:51
    新颖的建立表格方式  在word中建立表格本来就非常方便,不过这里有一个鲜为人知的新办法,非常方便也非常有意思。在文本中只需简单地输入+号和一串-号,就能创建表格了。先用+号开始,然后输入一定数量的-号,达到...
  • ADO连接excel表格,怎样访问数据?

    千次阅读 2006-04-29 10:21:00
    VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的... 一、 VB读写EXCEL表: VB本身提自动化功能可以读写EXCEL表,其方法如下
  • C#用webbrowser在Form中嵌入并且操作Excel表格,如何让他不提示是否保存并取消保存?<!--google_ad_client = "pub-0746388214181358";google_ad_width = 336;google_ad_height = 280;google_ad_format = "336x280_as...
  • 声明:本文出自云上科技电脑工作室,版权所有,未经授权禁止转载,请尊重...下面笔者就跟大家来讲讲如何利用这两个工具来为Excel电子表格添加快速打印的功能按钮,只要轻轻点击一下这个按钮,内容就会发送至指定的...
  • 需求要求excel表格不能编辑并且数据不能进行复制,防止数据被复制出去造成泄漏。 具体实现代码: //创建标签页 SXSSFSheet sheet=excel.createSheet(“sheet名称”); //设置保护密码 sheet.protectSheet(“密码”); ...
  • 文章目录前言全局设置效果类修改字体、颜色、字体大小、行高等文字居中(靠右)对齐图片转存至相对路径图片缩放图片居中内容类Excel表格与Markdown表格的互转`mermaid`相关使用特殊文字使用`classDef`语法来自定义`...
  • 发一个信息收集系统,他在网站上发布一个Excel表格,然后所有人就可以编辑了! 我考察了一些开发方案,最后想着让领导在一个网页上上传他需要大家填写的表格,然后在Excel里开发一个插件。在那个插件里,可以下载...
  • 目前上市公司的会计报表全部以PDF格式上报到交易所,并且为了安全,实施了加密、禁止修改、禁止打印、禁止文字抽取等各种保护措施,给证券公司带来了很大困难,统计上市公司的数据只好重新把数据用手工方式输入一遍...

空空如也

空空如也

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

excel表格禁止编辑