在grails中加密xls文件并下载

在grails中加密xls文件并下载,grails,groovy,apache-poi,password-encryption,Grails,Groovy,Apache Poi,Password Encryption,我需要一个密码或加密xls文件下载 import org.apache.poi.hssf.usermodel.HSSFWorkbook import com.emmanuelrosa.frostedsheets.* def downloadxls(){ /* * Creates a workbook with Apache POI and decorates it * with Frosted Sheets. */ response.setContentType('ap

我需要一个密码或加密xls文件下载

import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.* 

def downloadxls(){
 /*
  * Creates a workbook with Apache POI and decorates it
  * with Frosted Sheets.
  */
    response.setContentType('application/vnd.ms-excel')
    response.setHeader('Content-Disposition', 'Attachment;Filename="data.xls"')

    // response.setContentType("APPLICATION/OCTET-STREAM")
    //  response.setHeader('Content-Disposition', 'Attachment;Filename="archivo.buf"')

    def outputStream = response.getOutputStream()
    def workbook = new FrostedWorkbook(new HSSFWorkbook())

    workbook['Students'].with {
        append(['First Name', 'Last Name', 'Age'])
        append(['John', 'Doe', '20'])
        append(['Jane', 'Smith', '18'])
    }

    workbook['Courses'].with {
        append(['Course Name', 'Number of Units'])
        append(['Algebra', 3])
        append(['English Grammar', 5])
    }
   /*
   * workbook is an instance of FrostedWorkbook, 
   * which implements the Workbook interface.
   * The writeProtectWorkbook() method is provided
   * by HSSFWorkbook (it's not in the interface).
   * FrostedWorkbook.workbook is the decorated HSSFWorkbook
   */

    workbook.workbook.writeProtectWorkbook('password', 'user')

    workbook.write(response.outputStream)
    outputStream << workbook

    outputStream.flush()

问题是您下载的文件未加密。

您试图使用两个库来创建Excel工作簿:JXL和Apache POI。他们彼此一无所知。所以JXL忽略了密码

Excel工作簿密码保护 加密和密码保护之间有区别。两者都使用密码,但密码保护不加密文件。该文件仍可以读取,但不能修改

下面是一个演示如何对工作簿进行密码保护的示例。我正在使用我的库,它是围绕ApachePOI的一个方便的包装器

import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.* 

/*
 * Creates a workbook with Apache POI and decorates it
 * with Frosted Sheets.
 */
def workbook = new FrostedWorkbook(new HSSFWorkbook())

workbook['Students'] << [
    ['First Name', 'Last Name', 'Age'],
    ['John', 'Doe', '20'],
    ['Jane', 'Smith', '18']
]

workbook['Courses'] << [
    ['Course Name', 'Number of Units'],
    ['Algebra', 3],
    ['English Grammar', 5]
]

/*
 * workbook is an instance of FrostedWorkbook, 
 * which implements the Workbook interface.
 * The writeProtectWorkbook() method is provided
 * by HSSFWorkbook (it's not in the interface).
 * FrostedWorkbook.workbook is the decorated HSSFWorkbook
 */
workbook.workbook.writeProtectWorkbook('password', 'user')
workbook.write(response.outputStream)
import org.apache.poi.hssf.usermodel.HSSFWorkbook
导入com.emmanuelrosa.frostedsheets.*
/*
*使用ApachePOI创建工作簿并对其进行装饰
*用磨砂床单。
*/
def工作簿=新的磨砂工作簿(新的HSSFWorkbook())

练习册['Students']顺便说一句,以后请一次问一个问题。Excel bit和回答是两个独立的问题:)谢谢你回答这个问题。我对你的代码有这个问题。org.apache.poi.ss.usermodel.SheetConditionalFormattingI我不明白。到底是什么问题?无法识别以下代码行。工作簿['Students'].{Hmm,这没有意义。你能用你的实际代码添加一个更新吗?我假设你已经添加了Frosted Sheets依赖项,因为如果没有它,它甚至无法编译。
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.* 

/*
 * Creates a workbook with Apache POI and decorates it
 * with Frosted Sheets.
 */
def workbook = new FrostedWorkbook(new HSSFWorkbook())

workbook['Students'] << [
    ['First Name', 'Last Name', 'Age'],
    ['John', 'Doe', '20'],
    ['Jane', 'Smith', '18']
]

workbook['Courses'] << [
    ['Course Name', 'Number of Units'],
    ['Algebra', 3],
    ['English Grammar', 5]
]

/*
 * workbook is an instance of FrostedWorkbook, 
 * which implements the Workbook interface.
 * The writeProtectWorkbook() method is provided
 * by HSSFWorkbook (it's not in the interface).
 * FrostedWorkbook.workbook is the decorated HSSFWorkbook
 */
workbook.workbook.writeProtectWorkbook('password', 'user')
workbook.write(response.outputStream)
import com.emmanuelrosa.frostedsheets.* 

/*
 * Creates an XLSX workbook with Apache POI and decorates it
 * with Frosted Sheets.
 */
def workbook = FrostedWorkbook.createXLSX()

workbook['Students'] << [
    ['First Name', 'Last Name', 'Age'],
    ['John', 'Doe', '20'],
    ['Jane', 'Smith', '18'],
]

workbook['Courses'] << [
    ['Course Name', 'Number of Units'],
    ['Algebra', 3],
    ['English Grammar', 5]
]
    
workbook.writeEncrypted(outputStream: response.outputStream, password: 'password')