回答
在導出爲excel時將此代碼寫入btnexporttoExcel Click事件。
string attachment = "attachment; filename=Export.xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
// Create a form to contain the grid
HtmlForm frm = new HtmlForm();
gv.Parent.Controls.Add(frm);
frm.Attributes["runat"] = "server";
frm.Controls.Add(gv);
frm.RenderControl(htw);
//GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
This library for .net在我們的使用案例中工作得非常好。
該庫允許您使用XML生成Excel工作簿,它在C#中100%構建,並且不需要安裝Excel來生成文件。它公開了一個簡單的對象模型來生成XML工作簿。
沒有與GridView控件的內置集成,但是編寫通用適配器非常簡單,並且可以在其他項目中重用。
這裏可能有些東西,但是如果你想自己做,你可以編寫一些代碼,它們遍歷GridView.Rows集合,然後是GridViewRow.Cells集合。
從那裏建立一個CSV文件應該很容易,而且Excel可以讀取它沒有問題。
CSV文件只是包含引號內的值的文本文件,用逗號分隔。像這樣:
"value", "value", "value"
"value", "value", "value"
您可以彈出記事本打開並手動構建一個試用它。
Private exportToExcel As Boolean = False
Private Sub LoadInExcel()
Me.Response.ClearContent()
Me.Response.AddHeader("content-disposition", "attachment; filename=MyFile.xls")
Me.Response.ContentType = "application/ms-excel"
Dim sw1 As New IO.StringWriter
Dim htw1 As HtmlTextWriter = New HtmlTextWriter(sw1)
GridView1.RenderControl(htw1)
Response.Write(sw1.ToString())
Response.End()
End Sub
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
' Confirms that an HtmlForm control is rendered for the specified ASP.NET
' server control at run time.
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
If exportToExcel Then
LoadInExcel()
End If
MyBase.Render(writer)
End Sub
Protected Sub btnPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrint.Click
exportToExcel = True
End Sub
您必須安裝excel並參考項目中的Office互操作庫。 地址:
進口Microsoft.Office.Core, 進口Microsoft.Office.Interop
上述該解決方案利用GridView和拉HTML出來。然後寫入excel。來自網格的html將包含樣式屬性,如填充顏色&。它也會使可排序的列標題看起來像鏈接。當我使用這個時,我寫了一個自定義解析器去除所有不需要的樣式,只給出原始數據。我將把這個任務交給你,因爲它是針對每個網格的。
即使內部沒有任何代碼,將重寫包括到VerifyRenderingInServerForm中也是非常重要的。
我已經做了好幾次了。 Excel有一個XML版本。它以.xml擴展名結尾,但您可以將文件的擴展名更改爲.xls,並且XML格式的文件將在Excel中打開。
這種方法最大的障礙是excel XML格式。我通常以我想要的大致格式在excel中創建一個excel文件。然後將Excel文件保存爲XML格式,然後在文本編輯器中打開它。
我通常從這個Excel示例頁面創建一個模板文件。然後,當我在Gridview中導出信息時,我只需要爲包含我計劃填充的單元格的部分創建xml,我只是預先添加並追加模板文件中已有的文本。
一旦你打開了格式化的Excel文件中的XML,你就會比較容易地找出所需要的XML。要理解的最難的部分是單元格引用格式化選項的方式,它們位於XML文件的頂部。
祝你好運,讓我知道,如果你需要進一步澄清。
編輯: 您只需要創建模板excel文件一次,只是爲了獲得所需的XML,你需要生成一個感覺。一旦你生成XML使用下面的代碼將其發送給用戶:
string fileName = "ExportedFile.xls";
Response.Clear();
Response.Buffer = true;
Response.ContentType = "text/xml";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
ExportToExcel(HttpContext.Current.Response.OutputStream, testUID);
Response.End();
public static void ExportToExcel(Stream outputStream)
{
XmlTextWriter xmlSink = new XmlTextWriter(outputStream, Encoding.Default);
//ExcelHeaderString and ExcelStylesString are from the template
xmlSink.WriteRaw(ExcelHeaderString);
xmlSink.WriteRaw(ExcelStylesString);
//write your elements here
xmlSink.WriteElement("YourElements");
//ExcelFooterString is from the template
xmlSink.WriteRaw(ExcelFooterString);
}
我的問題是,我必須在每臺機器上都這麼做嗎?我必須在每臺機器上創建一個excel文件。這是應用程序將在公司範圍內使用。 – Eric 2009-09-10 19:39:04
我以爲你會將它編入包含GridView的代碼中。我對你的陳述有些困惑。你正在創建一個基於Web的應用程序或桌面應用程序嗎? – Chris 2009-09-10 19:42:17
是的。那是對的。我將嘗試對此進行編程。這是一個基於網絡的應用程序。我可能是一個迷茫的人。但你說過你必須通常在Excel中創建一個excel文件。我必須在每臺使用此應用程序的計算機上都這樣做? – Eric 2009-09-10 19:50:59
我用CarlosAg.ExcelXmlWriter
link。
我經歷了所有GridViews
環HeaderCells
然後通過所有行。唯一的一點是,如果你允許分頁和你已經超過一個頁面,你必須設置每頁爲高值(我設置爲10000000),然後DataBind
的GridView
一次做你的工作。之後設置舊的PageSize值。如果有人知道更好的解決方案,歡迎您。
編輯:try/catch語句是有因爲某種原因,它是不可能的檢查控制類型,然後轉換爲標籤或LinkButton ==> control.GetType()
。
這是我的代碼。
public static Workbook CreateWorkbook(GridView gridView)
{
int pageSize = gridView.PageSize;
gridView.PageSize = 10000000;
gridView.DataBind();
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets.Add("Export");
WorksheetStyle style = workbook.Styles.Add("headerStyle");
style.Font.Bold = true;
style = workbook.Styles.Add("defaultStyle");
style.Alignment.WrapText = true;
style = workbook.Styles.Add("infoStyle");
style.Font.Color = "Red";
style.Font.Bold = true;
sheet.Table.Rows.Add(new WorksheetRow());
WorksheetRow headerRow = new WorksheetRow();
foreach (DataControlFieldHeaderCell cell in gridView.HeaderRow.Cells)
{
if (!string.IsNullOrEmpty(cell.Text))
headerRow.Cells.Add(cell.Text, DataType.String, "headerStyle");
else
foreach (Control control in cell.Controls)
{
LinkButton linkButton = new LinkButton();
try
{
linkButton = (LinkButton)control;
}
catch { }
if (!string.IsNullOrEmpty(linkButton.Text))
headerRow.Cells.Add(linkButton.Text, DataType.String, "headerStyle");
else
{
Label label = new Label();
try
{
label = (Label)control;
}
catch { }
if (!string.IsNullOrEmpty(label.Text))
headerRow.Cells.Add(label.Text, DataType.String, "headerStyle");
}
}
}
sheet.Table.Rows.Add(headerRow);
foreach (GridViewRow row in gridView.Rows)
{
WorksheetRow wrow = new WorksheetRow();
foreach (TableCell cell in row.Cells)
{
foreach (Control control in cell.Controls)
{
if (control.GetType() == typeof(Label))
{
wrow.Cells.Add(((Label)control).Text, DataType.String, "defaultStyle");
}
}
}
sheet.Table.Rows.Add(wrow);
}
gridView.PageSize = pageSize;
return workbook;
}
此方法直接轉換爲Excel格式,無需在服務器上安裝XML或使用XML。
Protected Sub ExportToExcel()
Dim gv1 As GridView = FindControlRecursive(objPlaceHolder, "GridView1")
If Not gv1 Is Nothing Then
Response.ClearHeaders()
Response.ClearContent()
' Set the content type to Excel
Response.ContentType = "application/vnd.ms-excel"
' make it open the save as dialog
Response.AddHeader("content-disposition", "attachment; filename=ExcelExport.xls")
'Turn off the view state
Me.EnableViewState = False
'Remove the charset from the Content-Type header
Response.Charset = String.Empty
Dim myTextWriter As New System.IO.StringWriter
Dim myHtmlTextWriter As New System.Web.UI.HtmlTextWriter(myTextWriter)
Dim frm As HtmlForm = New HtmlForm()
Controls.Add(frm)
frm.Controls.Add(gv1)
'Get the HTML for the control
frm.RenderControl(myHtmlTextWriter)
'Write the HTML to the browser
Response.Write(myTextWriter.ToString())
'End the response
Response.End()
End If
End Sub
Private Function FindControlRecursive(ByVal root As Control, ByVal id As String) As Control
If root.ID = id Then
Return root
End If
Dim c As Control
For Each c In root.Controls
Dim t As Control = FindControlRecursive(c, id)
If Not t Is Nothing Then
Return t
End If
Next
Return Nothing
End Function
- 1. 將gridview數據導出爲pdf
- 2. 通過mysql導出Gridview數據
- 3. gridview數據導出到excel在asp.net
- 4. 導出Gridview連接到MYSQL數據excel
- 5. 將gridview數據導出爲CSV文件
- 6. 從Gridview數據導出爲excel
- 7. 導出Gridview到Excel:無法導出正確的數據顯示
- 8. 如何使用asp.net GridView中導出圖像,並使用asp.net或導出GridView的數據,以PDF數據到PDF
- 9. 將Gridview數據導出到ASP.NET Linq數據綁定
- 10. 將Excel數據導入GridView
- 11. 從gridview導入數據到數據庫
- 12. 導出GridView到Excel
- 13. GridView導出到Excel
- 14. 導出爲Excel不導出Gridview內容
- 15. 導出到Excel文件時,GridView導出不會返回任何數據
- 16. 導出數據
- 17. 導出數據
- 18. 導出數據
- 19. 導出數據
- 20. 導出數據
- 21. 無法將多頁gridview數據導出爲excel
- 22. 如何將數據從devexpress gridview導出爲pdf在mvc
- 23. 如何導出到Excel父級和嵌套的GridView數據?
- 24. 在Asp.net中只導出Gridview數據到Excel格式C#
- 25. 當數據包含逗號時從Gridview導出爲CSV
- 26. excel從gridview導出時丟失的數據
- 27. 使用jquery將excel表格中的數據導出到gridview
- 28. 使用Open Xml將數據從gridview導出到Excel
- 29. 如何將數據從Gridview導出到Excel工作表
- 30. 將數據從gridview導出到不同的excel工作表
這應該可能超過用戶 – 2009-09-10 18:02:49
我不同意,如果他想以編程方式做。我認爲這是事實。 – 2009-09-10 18:13:52
是布萊恩。我想以編程方式。 – Eric 2009-09-10 19:26:32