我有一个表单,允许用户从网格上的列表中选择项目,并允许他们导出与选定项目对应的数据。数据应导出到现有的Excel模板。我尝试了一些代码,但是发生什么情况是下载的excel文件打开时显示空白。你能帮我解释为什么它发生,我的代码有什么问题。数据没有在excel文件上填充C#
下面是我的代码:在此先感谢
try
{
UpdateDataSelection();
string pFileName = "SubconOneLineList_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
string pSubConCodeLists = string.Empty;
string pJobCodeKey = string.Empty;
string pCountryCode = string.Empty;
string pWorkCategoryCode = string.Empty;
string pCapacityCode = string.Empty;
string pOperativeCountryCode = string.Empty;
string pNameAbbr = string.Empty;
string pAffiliates = string.Empty;
pSubConCodeLists = string.Join(",", DataSelection);
if (pSubConCodeLists == string.Empty)
{
GetSubconDatabaseFilter(out pSubConCodeLists, out pNameAbbr, out pJobCodeKey, out pCountryCode, out pOperativeCountryCode, out pWorkCategoryCode, out pAffiliates, out pCapacityCode);
}
string pGridFilter = (rgvSubcontractor.MasterTableView.FilterExpression == null ? string.Empty : rgvSubcontractor.MasterTableView.FilterExpression);
string pSortString = "";
if (rgvSubcontractor.MasterTableView.SortExpressions != null)
{
pSortString = ((rgvSubcontractor.MasterTableView.SortExpressions.GetSortString() == null) || (rgvSubcontractor.MasterTableView.SortExpressions.GetSortString() == string.Empty) ? pSortString : rgvSubcontractor.MasterTableView.SortExpressions.GetSortString());
}
pSortString = (pSortString == string.Empty ? "COMPANY_NAME ASC" : pSortString + ", COMPANY_NAME ASC");
DataTable pDTSubconOneLineList = mSubContractorBS.getRptSubContractorOneLineList(pSubConCodeLists, pNameAbbr, string.Empty, string.Empty, pJobCodeKey, pCountryCode, pOperativeCountryCode, pWorkCategoryCode, pAffiliates, pCapacityCode);
DataView pDVSubconOneLineList = new DataView(pDTSubconOneLineList);
if (pGridFilter != string.Empty)
{
pDVSubconOneLineList.RowFilter = pGridFilter;
}
pDVSubconOneLineList.Sort = pSortString;
pDTSubconOneLineList = pDVSubconOneLineList.ToTable();
pDTSubconOneLineList.TableName = "USP_RPT_SUBCON_ONE_LINE_LIST";
Process[] processList = Process.GetProcesses();
string path = Server.MapPath("~") + "\\SIS\\Template\\Download\\Subcon_Profile_List_Import_Template.xlsx";
//string targetPath = Convert.ToString(Session["App_Data_Path"]) + "EXPORT_OUTPUT";
string targetPath = Convert.ToString(Server.MapPath("~")) + "EXPORT_OUTPUT";
string destFile = System.IO.Path.Combine(targetPath, pFileName);
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
File.Copy(path, destFile, true);
object misValue = System.Reflection.Missing.Value;
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(destFile, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Sheets[1];
xlWorkSheet.get_Range("A2", "AN" + xlWorkSheet.Rows.Count.ToString()).Clear();
object[,] objData = null;
int rowcount = pDTSubconOneLineList.Rows.Count;
objData = new Object[pDTSubconOneLineList.Rows.Count, pDTSubconOneLineList.Columns.Count];
for (int row = 0; row < pDTSubconOneLineList.Rows.Count; row++)
{
for(int column= 0; column < pDTSubconOneLineList.Columns.Count; column++)
{
objData[row, column] = pDTSubconOneLineList.Rows[row][column].ToString();
}
}
((Excel.Worksheet)xlWorkBook.Sheets[1]).Select(Type.Missing);
xlWorkBook.Save();
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
xlWorkSheet = null;
xlWorkBook = null;
xlApp = null;
GC.Collect();
string pMimeType = string.Empty;
string pEncoding = string.Empty;
string pExtension = string.Empty;
Response.Buffer = true;
Response.Clear();
Response.AppendCookie(new HttpCookie("fileDownloadToken", hdDownLoadToken.Value));
Response.ContentType = pMimeType;
Response.AddHeader("content-disposition", "attachment; filename=" + pFileName);
Response.Flush();
}
catch (Exception ex)
{
ErrorHelper.HandleError(ex);
}
快速的问题。你检查过你的数据表是否包含行和列。行数和列数是多少? – 2016-08-19 03:55:17
不要采用这种方法来编写Excel文件。创建Excel应用程序的实例会随着时间的推移导致内存泄漏,Office应用程序不属于Web服务器。还有其他工具(库),甚至是免费的,可以编写excel。如果只是原始数据,请使用CSV格式编写,但使用扩展名XLS保存。它会工作! –