[英]How to display a 'Save as' dialog box for an Excel file generated through C#
[英]save as dialog box for exporting file to excel C#
我將多個數據表作為不同的工作表導出到單個excel文件,並且工作正常。 但是,excel文件將保存到指定的路徑。 我想要一個“另存為”對話框,用戶可以從中選擇保存文件的路徑。 我在按鈕單擊上嘗試了以下代碼:
protected void excelexport(object sender, EventArgs e)
{
try
{
string sql = null;
string data = null;
string path = "C:\\inetpub/wwwroot/MahindraEarth/exportexcel/exportexcel";
int i = 0;
int j = 0;
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
xlApp = new Excel.ApplicationClass();
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataTable dts = new System.Data.DataTable(); ;
System.Data.DataTable dss = new System.Data.DataTable();
Enquiry gs = new Enquiry();
ResultClass objres = gs.fn_GetEnquiryList();
if (objres.bStatus)
{
eslist<Enquiry> OBJLIST = objres.objData as eslist<Enquiry>;
if (OBJLIST.Count > 0)
{
dt = (DataTable)OBJLIST;
}
}
Operator op = new Operator();
ResultClass objrest = op.fn_GetOperatorList();
if (objrest.bStatus)
{
eslist<Operator> OBJLISTS = objrest.objData as eslist<Operator>;
if (OBJLISTS.Count > 0)
{
dts = (DataTable)OBJLISTS;
}
}
Contact co = new Contact();
ResultClass objress = co.fn_GetContactList();
if (objress.bStatus)
{
eslist<Contact> OBJLISS = objress.objData as eslist<Contact>;
if (OBJLISS.Count > 0)
{
dss = (DataTable)OBJLISS;
}
}
DataSet dataSet = new DataSet();
dataSet.Tables.Add(dt);
dataSet.Tables.Add(dts);
dataSet.Tables.Add(dss);
SaveFileDialog saveFileDialog = new SaveFileDialog();
String[] Worksheets = new String[dataSet.Tables.Count];
Excel.Worksheet[] xlWorkSheet = new Excel.Worksheet[dataSet.Tables.Count];
for (int k = 0; k < dataSet.Tables.Count; k++)
{
DataTable dst = dataSet.Tables[k];
xlWorkSheet[k] = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(k + 1);
for (i = 0; i <= dst.Rows.Count - 1; i++)
{
for (j = 0; j <= dst.Columns.Count - 1; j++)
{
xlWorkSheet[k].Cells[1, j + 1] = dataSet.Tables[k].Columns[j].ColumnName;
data = dst.Rows[i].ItemArray[j].ToString();
xlWorkSheet[k].Cells[i + 2, j + 1] = data;
xlWorkSheet[k].Name = dataSet.Tables[k].TableName;
}
}
}
xlWorkBook.SaveAs(path + ".xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
for (int p = 0; p < 3; p++)
{
releaseObject(xlWorkSheet[p]);
}
releaseObject(xlWorkBook);
releaseObject(xlApp);
exportsuccess.Style.Add("display", "");
}
catch (Exception ex)
{
}
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
}
finally
{
GC.Collect();
}
}
如何獲取“另存為”對話框,以便將多個數據表保存在多個工作表中而不是單個工作表中。
謝謝,
試試這個。 這應該給您“另存為”對話框。 一些代碼看起來應該與您的代碼相似,這應該使您對應將此代碼摘錄附加到何處有所了解。
#region Save & Quit
//Save and quit, use SaveCopyAs since SaveAs does not always work
Guid id = Guid.NewGuid();
string uniqueFileName = id.ToString() + ".xls";
string fileName = Server.MapPath("~/" + uniqueFileName);
xlApp.DisplayAlerts = false; //Supress overwrite request
xlWorkBook.SaveAs(fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
//Release objects
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
//Give the user the option to save the copy of the file anywhere they desire
String FilePath = Server.MapPath("~/" + uniqueFileName);
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Disposition", "attachment; filename=MyClaimsReport-" + DateTime.Now.ToShortDateString() + ".xls;");
response.TransmitFile(FilePath);
response.Flush();
response.Close();
//Delete the temporary file
DeleteFile(fileName);
#endregion
private void DeleteFile(string fileName)
{
if (File.Exists(fileName))
{
try
{
File.Delete(fileName);
}
catch (Exception ex)
{
//Could not delete the file, wait and try again
try
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
File.Delete(fileName);
}
catch
{
//Could not delete the file still
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.