EXCEL中发现不可读的内容。是否恢复此工作薄的内容?如果信任此工作薄的来源,请单击”是“

由于业务需要,之前的EXCEL导出方法不能满足需求,因为2003只支持最多256列,但是2007就没有256列这个限制,因此升级NPOI到2.0

使用XSSFWorkbook生成xlsx,等下载下来之后总是提示:EXCEL中发现不可读的内容。是否恢复此工作薄的内容?如果信任此工作薄的来源,请单击”是“

追求完美的同时无法忍受每次打开都来这么个提示,所以花了些时间来研究,经过不懈努力,以下代码终于完美解决

        private void RequeseExcel(IWorkbook workbook, string _fileName)
        {
            if (workbook == null) return;
            MemoryStream ms = new MemoryStream();
            workbook.Write(ms);
            if (_fileName == null)
            {
                _fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx";
            }
            System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition",string.Format("attachment;filename={0}",_fileName));
            System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
            System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
            workbook = null;
            ms.Close();
            ms.Dispose();
            System.Web.HttpContext.Current.Response.End();
        }

不用指定ContentType

Excel VBA (Visual Basic for Applications) 提供了一种强大的自动化工具,你可以使用VBA脚本来完成复杂的任务,例如将多个Excel工作簿的特定列合并到一个新的工作簿。以下是简单的步骤说明: 1. **打开VBA编辑器**:首先,你需要在Excel按下 `Alt + F11` 或者点击菜单栏的 "开发" -> "Visual Basic" 来打开VBA编辑器。 2. **创建宏**:在VBA编辑器,右键点击 "Sheet1"(或者 "ThisWorkbook" 如果你想在新工作簿里操作)选择 "插入" -> "模块" 创建一个新的模块,然后在代码窗口开始编写代码。 ```vba Sub MergeColumns() Dim sourceBook As Workbook Dim targetBook As Workbook Dim sourceSheet As Worksheet Dim targetSheet As Worksheet Dim startRow As Long Dim lastRow As Long ' 设置源工作簿路径和需要合并的列 Set sourceBook = Workbooks.Open("source_file.xlsx") Set sourceSheet = sourceBook.Worksheets("Sheet1") ' 更改为你需要合并的源工作表 startRow = 1 ' 开始行数,可根据实际情况调整 lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "A").End(xlUp).Row ' 创建目标工作簿 Set targetBook = Workbooks.Add Set targetSheet = targetBook.Worksheets(1) ' 从每个源工作簿复制数据到目标工作簿 For i = 1 To sourceBook.Workbooks.Count If i = 1 Then ' 如果这是第一个工作簿,则直接粘贴数据 sourceSheet.Range(sourceSheet.Cells(startRow, 1), sourceSheet.Cells(lastRow, sourceSheet.Columns.Count)).Copy Destination:=targetSheet.Cells(startRow, 1) Else ' 否则,在目标工作簿追加数据 sourceSheet.Range(sourceSheet.Cells(startRow, 1), sourceSheet.Cells(lastRow, sourceSheet.Columns.Count)).Copy _ Destination:=targetSheet.Cells(targetSheet.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1) End If Next i ' 关闭不需要的工作簿并保存目标工作簿 sourceBook.Close SaveChanges:=False targetBook.SaveAs "merged_data.xlsx" ' 更改为你的目标文件名 End Sub ``` 记得替换 `"source_file.xlsx"` 为源工作簿的实际路径,以及适当的列和行范围。运行这个宏,你的工作簿就会按照指定的方式合并了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值