簡體   English   中英

從.csv文件轉換為.xlsx excel文件

[英]Convert from .csv file to .xlsx excel file

您好我正在使用ASP.NET應用程序並在excel頁面中生成擴展名為.csv的報表。 但是我想用.xlsx etension來制作它。 我目前使用的代碼如下:受保護的子btnSubmit_Click(ByVal sender As Object,ByVal e As EventArgs)處理btnSubmit.Click

    Dim sql As String
    Dim strLine As String = ""
    Dim attachment As String = "attachment; filename=PTW.csv"

    m_sBranch = ddlBranches.SelectedValue
    m_sRegion = ddlAreas.SelectedValue

    Dim cnn As SqlConnection = New SqlConnection("Server=XYZ;Database=abc;Trusted_Connection=yes;") 

    HttpContext.Current.Response.AddHeader("content-disposition", attachment)
    HttpContext.Current.Response.ContentType = "text/csv"

    cnn.Open()

    sql = GetReportSql(m_sBranch, m_sRegion)

    Dim cmd As SqlCommand = New SqlCommand(sql, cnn)
    Dim dr As SqlDataReader
    dr = cmd.ExecuteReader()

    HttpContext.Current.Response.Write("PTW JOBS - EXPORTED ON " + DateTime.Now)

    For i = 0 To dr.FieldCount - 1
        strLine = strLine & dr.GetName(i).ToString & ","
    Next
    HttpContext.Current.Response.Write(strLine)

    Dim sb As StringBuilder = New StringBuilder()
    Dim temp As String = ""
    While dr.Read()
        For i = 0 To dr.FieldCount - 1
            temp = temp & dr.GetValue(i)
            temp = temp.Replace(",", " ")
            sb.Append(temp & ",")
            temp = ""
        Next
        sb.AppendLine()
        strLine = ""                            
    End While

    HttpContext.Current.Response.Write(sb.ToString())

End Sub

任何幫助將受到高度贊賞。 謝謝。

查看OpenXML SDK:我知道我的示例不會轉換.csv文件,但它會引導您朝着正確的方向前進。 http://msdn.microsoft.com/en-us/library/bb448854(office.14).aspx

我已經在asp.net中使用它來動態創建xlsx文檔,直接流式傳輸到Web客戶端:

public static System.IO.MemoryStream ConvertToExcel(DataSet ds)
        {
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            using (SpreadsheetDocument package = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
            {
                package.AddWorkbookPart();
                package.WorkbookPart.Workbook = new Workbook();
                package.WorkbookPart.AddNewPart<WorksheetPart>();

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    DataTable tbl = ds.Tables[0];
                    SheetData xlSheetData = new SheetData();
                    foreach (DataRow row in tbl.Rows)
                    {
                        Row xlRow = new Row();
                        foreach (DataColumn col in tbl.Columns)
                        {
                            object cellData = row[col];
                            Cell xlCell = null;
                            if (cellData != null)
                            {
                                xlCell = new Cell(new InlineString(new DocumentFormat.OpenXml.Spreadsheet.Text(cellData.ToString()))) { DataType = CellValues.InlineString };
                            }
                            else
                            {
                                xlCell = new Cell(new InlineString(new DocumentFormat.OpenXml.Spreadsheet.Text(String.Empty))) { DataType = CellValues.InlineString };
                            }
                            xlRow.Append(xlCell);
                        }
                        xlSheetData.Append(xlRow);
                    }

                    package.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet(xlSheetData);
                    package.WorkbookPart.WorksheetParts.First().Worksheet.Save();

                    // create the worksheet to workbook relation
                    package.WorkbookPart.Workbook.AppendChild(new Sheets());
                    package.WorkbookPart.Workbook.GetFirstChild<Sheets>().AppendChild(new Sheet()
                    {
                        Id = package.WorkbookPart.GetIdOfPart(package.WorkbookPart.WorksheetParts.First()),

                        SheetId = 1,

                        Name = "Sheet1"

                    });

                    package.WorkbookPart.Workbook.Save();

                }
            }
            return stream;
        }

Shariful,從我讀過的(尚未嘗試過),我相信最好的方法是設置你的HTTP響應頭,如這里所述

簡而言之,關鍵似乎是將content-disposition標頭設置為“attachment”。

例如:

Content-Disposition: attachment; filename=<file name.ext> 

很抱歉,我沒有對此進行過測試,但在我搜索密切相關的內容時,幾乎我去過的每個地方都建議使用此方法來強制下載對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM