公司软件提供数据导出功能,基于Excel2003的数据导出,前段时间客户提出说软件有BUG数据丢失,这一问题由我来处理,本以为是程序的问题,翻看代码,没发现问题,没办法只能跟踪,本地的测试数据比较少,没找到问题,只能模拟客户的环境,找到了问题所在。
首先看导出的这段代码
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i<trElements.length;++i){if(key.parentElement.parentElement.parentElement==trElements[i].parentElement.parentElement){codeElement=trElements[i];break}}if(codeElement!=null){var content=codeElement.innerText;if(window.clipboardData==null){window.alert("您的浏览器不支持脚本复制,请尝试手动复制。")}else{window.clipboardData.setData("Text",content);window.alert("源代码已经复制到剪贴板上。")}}}function LineNumberVisible(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i XlFileFormat. xlExcel7这个格式是有问题的,实际测试程序导出的行数只有16384行,只要超过16384行的数据就丢失了。为了保证在大于16384行的数据仍然能导出到Excel,采用了Excel2007的DLL,第二个参数使用XlFileFormat.xlExcel8便解决这个问题。
ExcelApp app = new ExcelApp(); app.ErrorCheckingOptions.BackgroundChecking = false; app.ErrorCheckingOptions.NumberAsText = true; app.ErrorCheckingOptions.TextDate = true; Excel2.Workbooks workbooks = app.Workbooks; Excel2.Workbook workbook = workbooks.Add(Excel2.XlWBATemplate.xlWBATWorksheet); object missing = System.Reflection.Missing.Value; Excel2.Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; worksheet.Copy(missing, workbook.Worksheets[1]); Excel2.Range range = worksheet.get_Range("A1", missing); range = range.get_Resize(dt.Rows.Count, dt.Columns.Count); object[,] arry1 = new object[dt.Rows.Count, dt.Columns.Count]; for (int j = 0; j < dt.Rows.Count; j++) { for (int i = 0; i < dt.Columns.Count; i++) { arry1[j, i] = dt.Rows[j][i]; } } range.Value2 = arry1; SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "excel(*.xls)|*.xls"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { path = saveFileDialog.FileName; }else
{
return;
} workbook.Saved = true; Excel2.XlFileFormat op = XlFileFormat.xlExcel7; workbook.SaveAs(saveFileDialog.FileName, op, null, null, null, null, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null); workbook.Close(missing, missing, missing); app.Quit();