导出Excel—外部表不是预期的格式

方法一:

http://www.liqiu.info/2011/01/%E5%88%86%E4%BA%AB-net%E5%AF%BC%E5%87%BAexcel/

 

http://www.google.com.hk/#hl=zh-CN&newwindow=1&safe=strict&q=%E5%AF%BC%E5%87%BA+%E9%9D%9E+html%E7%9A%84+excel+&oq=%E5%AF%BC%E5%87%BA+%E9%9D%9E+html%E7%9A%84+excel+&aq=f&aqi=&aql=&gs_sm=e&gs_upl=104042l112685l10l8l8l0l0l0l1l315l1735l0.3.4.1l8&fp=1&biw=1680&bih=932&cad=b

方法二:

最终是用DataGrid通过Response导出成Excel格式,在页面直接打开,然后让用户另存为正式Excel格式,再导入就可以了

Response出来的就是这个问题,虽然他生成excel很快,但再导入数据库的时候就有毛病,还是用excel.dll控件吧,这个绝对没有问题 
public void Out2Excel(string sTableName,string url) 

Excel.Application oExcel=new Excel.Application(); 
Workbooks oBooks; 
Workbook oBook; 
Sheets oSheets; 
Worksheet oSheet; 
Range oCells; 
string sFile= " ",sTemplate= " "; 
// 
System.Data.DataTable dt=TableOut(sTableName).Tables[0]; 

sFile=url+ "\\myExcel.xls "; 
sTemplate=url+ "\\MyTemplate.xls "; 
// 
oExcel.Visible=false; 
oExcel.DisplayAlerts=false; 
//定义一个新的工作簿 
oBooks=oExcel.Workbooks; 
oBooks.Open(sTemplate,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing, Type.Missing); 
oBook=oBooks.get_Item(1); 
oSheets=oBook.Worksheets; 
oSheet=(Worksheet)oSheets.get_Item(1); 
//命名该sheet 
oSheet.Name= "Sheet1 "; 

oCells=oSheet.Cells; 
//调用dumpdata过程,将数据导入到Excel中去 
DumpData(dt,oCells); 
//保存 
oSheet.SaveAs(sFile,Excel.XlFileFormat.xlTemplate,Type.Missing,Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing); 
oBook.Close(false, Type.Missing,Type.Missing); 
//退出Excel,并且释放调用的COM资源 
oExcel.Quit(); 

GC.Collect(); 
KillProcess( "Excel "); 


private void KillProcess(string processName) 

System.Diagnostics.Process myproc= new System.Diagnostics.Process(); 
//得到所有打开的进程 
try 

foreach (Process thisproc in Process.GetProcessesByName(processName)) 

if(!thisproc.CloseMainWindow()) 

thisproc.Kill(); 



catch(Exception Exc) 

throw new Exception( " ",Exc); 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 导出 Excel 时,动态头的实现方式可以有很多种。 一种常见方式是,在导出 Excel 前就确定好头的内容,并且将头内容存储在一个数组或者列里。根据这个数组或列,我们可以动态地设置 Excel头。 另一种方式是,在导出 Excel 时根据数据动态生成头。这通常需要对数据进行预处理或者整理,以确定 Excel 头的内容。 无论采用哪种方式,Java 导出 Excel 的核心思路是基于 POI 库。POI 是一个开源的 Java Excel API,它允许我们在 Java 应用程序中创建、读取和修改 Excel 文件。 具体实现时,可以使用 POI 提供的 XSSFWorkbook、Sheet 和 Row 等类和方法,来创建 Excel 头和单元格,并填充数据。同时,还可以通过设置单元格和单元格样式,来实现格式控制和美化。 在其中一个实现方式中,代码大概会长这个样子: // 创建一个新的 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建一个新的 Sheet XSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建头内容数组 String[] headers = {"序号", "姓名", "年龄", "性别"}; // 创建头行 XSSFRow headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { // 创建单元格并设置头内容 XSSFCell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); // 设置单元格样式 XSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); cell.setCellStyle(style); } // 填充数据 for (int i = 0; i < dataList.size(); i++) { // 创建数据行 XSSFRow dataRow = sheet.createRow(i + 1); // 获取数据对象 Data data = dataList.get(i); // 创建单元格并设置数据内容 XSSFCell cell0 = dataRow.createCell(0); cell0.setCellValue(data.getId()); XSSFCell cell1 = dataRow.createCell(1); cell1.setCellValue(data.getName()); XSSFCell cell2 = dataRow.createCell(2); cell2.setCellValue(data.getAge()); XSSFCell cell3 = dataRow.createCell(3); cell3.setCellValue(data.getSex()); // 设置单元格样式 XSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); cell0.setCellStyle(style); cell1.setCellStyle(style); cell2.setCellStyle(style); cell3.setCellStyle(style); } // 将工作簿写入硬盘中 FileOutputStream outputStream = new FileOutputStream("data.xlsx"); workbook.write(outputStream); outputStream.close(); 总的来说,Java 导出 Excel 动态头的实现方式多种多样,可以根据需求和场景来选择合适的方式。但无论采用哪种方式,核心思路都要基于 POI 库来进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值