NPOI 能实现对生成的excel内容只读,不可编辑,但可以允许用户在excel里调整列宽和行高吗

解决方案 »

  1.   

    类似这样的开发,标准手段
    1.百度“excel 锁定”
    我得到的结果是:
    https://jingyan.baidu.com/article/597035521917ee8fc00740d0.html2.我们新建一个excel,按上面的操作,是否满足你的需求,实测结果,按照上面的办法在最后一步勾选上“设置单元格格式”,“设置列格式”,“设置行格式”就行3.开启excel录制宏功能去看一下vba代码就知道你大概需要做些什么操作了
    主要vba代码为
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
            AllowFormattingRows:=True4.接着你在去NOPI的官方api查询,有没有对应的对象,转化成c#代码就是
      

  2.   

    https://www.cnblogs.com/wknet/p/4029313.html你看这样一找就出来结果了
      

  3.   

    for (int columnNum = 0; columnNum <= 26; columnNum++)  
                {  
                    int columnWidth = ffSheet.GetColumnWidth(columnNum) / 256;//获取当前列宽度  
                    for (int rowNum = 1; rowNum <= ffSheet.LastRowNum; rowNum++)//在这一列上循环行  
                    {  
                        IRow currentRow = ffSheet.GetRow(rowNum);  
                        ICell currentCell = currentRow.GetCell(columnNum);  
                        int length = Encoding.UTF8.GetBytes(currentCell.ToString()).Length;//获取当前单元格的内容宽度  
                        if (columnWidth < length + 1)  
                        {  
                            columnWidth = length + 1;  
                        }//若当前单元格内容宽度大于列宽,则调整列宽为当前单元格宽度,后面的+1是我人为的将宽度增加一个字符  
                    }  
                    ffSheet.SetColumnWidth(columnNum, columnWidth * 256);  
                }
      

  4.   

     for (int rowNum = 2; rowNum <= ffSheet.LastRowNum; rowNum++)  
                {  
                    IRow currentRow = ffSheet.GetRow(rowNum);  
                    ICell currentCell = currentRow.GetCell(27);  
                    int length = Encoding.UTF8.GetBytes(currentCell.ToString()).Length;  
                    currentRow.HeightInPoints = 20 * (length / 60 + 1);  
                }
      

  5.   

    Free Spire.XLS(免费版) 不就可以吗,
    using Spire.Xls;namespace Locksheet_XLS
    {
        class Program
        {
            static void Main(string[] args)
            {
                Workbook workbook = new Workbook();
                workbook.LoadFromFile("test.xlsx");            workbook.Worksheets[0].Range.Style.Locked = true;           
                workbook.Worksheets[0].Protect("123", SheetProtectionType.All);                       workbook.SaveToFile("result.xlsx", ExcelVersion.Version2010);
                System.Diagnostics.Process.Start("result.xlsx");
            }
        }
    }也可以看下原文:https://www.e-iceblue.com/Tutorials/Spire.XLS/Spire.XLS-Program-Guide/Excel-Lock-Easily-Lock-Excel-Worksheet-in-C-VB.NET.html