2015-10-14 84 views
0

我有这个导出功能,允许我在一个excel中将2个网格视图导出为2个独立的工作表。如何将我的导出格式设置为microsoft.office.interop.excel中的excel工作簿?

但我的问题是:

  1. 我怎么能有一个像往常一样下载一个常用的弹出窗口,当我出口按钮,点击提示用户打开,另存为,取消下载,而不是将其保存的到一个特定的位置(目前我在我的代码中做什么)?

  2. 如何设置代码以启用所有单元格的wraptext = true,并自动格式化列高和宽以固定所有文本,以便它不显示######日期为例如,当excel打开时,列宽太小。

保护无效EXPORT_BUTTON_Click(对象发件人,EventArgs的) { Microsoft.Office.Interop.Excel._Application应用=新Microsoft.Office.Interop.Excel.Application(); //在Excel应用程序中创建新的WorkBook Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);

String DT1 = "Data table 1"; 
String DT2 = "Data table 2"; 

ExportToExcel(app, workbook, Gridview1, DT1, 1); 

ExportToExcel(app, workbook, Gridview2, DT2, 2); 

} 
public void ExportToExcel(Microsoft.Office.Interop.Excel._Application app, Microsoft.Office.Interop.Excel._Workbook workbook, GridView gridview, string SheetName, int sheetid) 
{ 

// see the excel sheet behind the program 
app.Visible = true; 

// get the reference of first sheet. By default its name is Sheet1. 
// store its reference to worksheet 

worksheet = (Excel.Worksheet)workbook,Worksheets.Add(); 

// changing the name of active sheet 
worksheet.Name = SheetName; 

// storing header part in Excel 
for (int i = 1; i < gridview.Columns.Count + 1; i++) 
{ 
    worksheet.Cells[1, i] = gridview.Columns[i - 1].HeaderText; 
} 



// storing Each row and column value to excel sheet 
for (int i = 0; i < gridview.Rows.Count - 1; i++) 
{ 
    for (int j = 0; j < gridview.Columns.Count; j++) 
    { 
     worksheet.Cells[i + 2, j + 1] = gridview.Rows[i].Cells[j].Text.ToString(); 
    } 
} 
//save the application 

workbook.SaveAs(@"C:\Users\test\Desktop\Test\" + datetime.ToString("dd-MM-yyyy_hh-mm-ss") + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
      } 
} 

回答

1

修改Excel文件的路径保存到虚拟路径如下

workbook.SaveAs(@"C:\Users\test\Desktop\Test\" + datetime.ToString("dd-MM-yyyy_hh-mm-ss") + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

将其更改为

workbook.SaveAs(@"~/ExcelFiles/Filename.xlsx" + datetime.ToString("dd-MM-yyyy_hh-mm-ss") + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

尝试下面的代码显示另存为对话框

String FileName = "FileName.xlsx"; 
String FilePath = "~/ExcelFiles/FileName.xlsx"; 
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
response.TransmitFile(FilePath); 
response.Flush(); 
response.End(); 
+0

嗨我收到此错误Microsoft Excel无法访问文件'C:\ Users \ testacc \ Documents \〜\ ExcelFiles \ DCA76310'。有几种可能的原因: ?文件名或路径不存在。在工作簿。 SaveAs(@“〜/ ExcelFiles/Filename.xlsx”+ datetime.ToString(“dd-MM-yyyy_hh-mm-ss”)+“.xls”,Type.Missing,Type.Missing,Type.Missing,Type.Missing ,Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,Type.Missing,Type.Missing,Type.Missing,Type.Missing); –

+0

嗨Ramesh,我想感谢你的帮助。除了目前尚未解决的这个问题外,我还在另一个帖子中为我的导出函数提供了一个额外的重要问题 - http://stackoverflow.com/questions/33161193/how-do-i- export-ajaxcontroltookkit-tabpanel-contentswhich-consist-of-multiple-c我希望你能帮我解答,谢谢:) –

+0

嗨对不起,因为我不知道有关将图表导出到excel的问题 –

1

试试这个:在工作簿您没有添加

Excel.Worksheet worksheet =(Excel.Worksheet)workbook.Worksheets["Sheet" + sheetid]; 
+0

您好我已经按照您的解决方案更新了我的代码。现在我可以填充Gridview1谢谢。然而,Gridview2工作表创建和填充,因此我收到了同样的错误后,采取sheetid 2.希望你能帮助我这个谢谢 –

0

工作

试试下面的代码

工作表=(Excel._Worksheet)oXL.Worksheets.Add() ;

worksheet.Name = SheetName;

更多信息检查http://dotnetmentors.com/c-sharp/how-to-export-sql-data-to-excel-using-microsoft-office-interop.aspx

使用RANGS

string[] colNames = new string[gv.Columns.Count]; 

    int col = 0; 

    foreach(gvvolumns dc in GridView.Columns) 
    colNames[col++] = dc.ColumnName; 

    char lastColumn = (char)(65 + dtProducts.Columns.Count - 1); 

    oSheet.get_Range("A1", lastColumn + "1").Value2 = colNames; 
    oSheet.get_Range("A1", lastColumn + "1").Font.Bold = true; 
    oSheet.get_Range("A1", lastColumn + "1").VerticalAlignment 
     = Excel.XlVAlign.xlVAlignCenter; 
+0

嗨感谢您的答复。我尝试添加工作表=(Excel.Worksheet)workbook.Worksheets.Add();用工作簿替换oXL,因为我相信它应该是这样的。但是我仍然在同一行收到相同的错误。Excel.Worksheet worksheet =(Excel.Worksheet)workbook.Worksheets [“Sheet”+ sheetid];其中sheeted = 2 –

+0

Excel.Worksheet工作表的目的是什么=(Excel.Worksheet)workbook.Worksheets [“Sheet”+ sheetid] ....工作表已添加,您可以直接将工作表添加到工作表对象中在工作簿中添加 – Laxmikant

+0

这对我来说需要在ID取gridview1和gridview2。请建议谢谢 –

1

由Laxmikant规定的修改方法 “ExportToExcel” 如下的代码设置你的头。

public void ExportToExcel(Microsoft.Office.Interop.Excel._Application app, Microsoft.Office.Interop.Excel._Workbook workbook, GridView gridview, string SheetName, int sheetid) 
{ 

// see the excel sheet behind the program 
app.Visible = true; 

worksheet = (Excel.Worksheet)workbook.Worksheets.Add(); 

// changing the name of active sheet 
worksheet.Name = SheetName; 

// storing header part in Excel 
for (int i = 1; i < gridview.Columns.Count + 1; i++) 
{ 
    worksheet.Cells[1, i] = gridview.Columns[i - 1].HeaderText; 
} 

// storing Each row and column value to excel sheet 
for (int i = 0; i < gridview.Rows.Count - 1; i++) 
{ 
    for (int j = 0; j < gridview.Columns.Count; j++) 
    { 
     worksheet.Cells[i + 2, j + 1] = gridview.Rows[i].Cells[j].Text.ToString(); 
    } 
} 

我删除的这两行代码,现在也没有必要参数的“Sheetid”

Excel.Worksheet worksheet =(Excel.Worksheet)workbook.Worksheets["Sheet" + sheetid]; 
worksheet = workbook.ActiveSheet; 

希望这将解决您的问题

+0

Hi Ramesh巴布,我已经更新了我的问题。请看看谢谢。 –

+0

验证我发布的答案以显示另存为对话框。 –

+0

抱歉,你是什么意思?请参考http://stackoverflow.com/questions/33146325/how-do-i-add-in-an-save-dialogue-function-in-my-export-to-excel-codes在我的新职位,谢谢 –

相关问题