导出到Excel时,带有重音的名称无法正确导出

时间:2014-10-23 08:41:35

标签: c# asp.net excel

我正在从数据表中导出带有以下代码的csv文件。但是,带有重音的名称无法正确导出

http://screencast.com/t/i9N2mB34DL

 var dt=JobContext.GetEngagementLetterReport(SPContext.Current.Site, int.Parse(rdlOption.SelectedValue));
            var columnNames = new List<string>
            {
                Constants.SearchFields.Client.ClientCode,
                Constants.SearchFields.Client.ClientName,
                Constants.SearchFields.Job.JobCode,
                Constants.SearchFields.Job.JobName,
                Constants.SearchFields.Job.JobPartner,
                Constants.SearchFields.Job.JobDirector,
                Constants.SearchFields.Job.JobManager,
                Constants.SearchFields.Job.BillContact,
                Constants.SearchFields.Job.LineOfService,
                Constants.SearchFields.Job.BusinessUnit,
                Constants.SearchFields.Job.OperatingUnit,
                "JobSiteUrl",
                "FileNameUrl"
            };
            ExcelHelper.ExportDatatabletoExcel(dt, columnNames);


 public static void ExportDatatabletoExcel(DataTable dt, List<string> columnNames)
        {
            try
            {
                const string attachment = "attachment; filename=elreport.csv";
                HttpContext.Current.Response.ClearContent();
                HttpContext.Current.Response.AddHeader("content-disposition", attachment);
                HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
                string tab = "";
                foreach (DataColumn dc in dt.Columns)
                {
                    if (!columnNames.Contains(dc.ColumnName)) continue;
                    HttpContext.Current.Response.Write(tab + dc.ColumnName);
                    tab = ";";
                }
                HttpContext.Current.Response.Write("\n");
                int i;
                foreach (DataRow dr in dt.Rows)
                {
                    tab = "";
                    for (i = 0; i < dt.Columns.Count; i++)
                    {
                        if(!columnNames.Contains(dt.Columns[i].ColumnName)) continue;
                        HttpContext.Current.Response.Write(tab + dr[i].ToString());
                        tab = ";";
                    }


                    HttpContext.Current.Response.Write("\n");
                }
                HttpContext.Current.Response.End();
            }
            catch (Exception ex)
            {
                string errorMessage = String.Format("ExportToExcelError: {0}", ex.Message);
                LoggingService.LogError(LoggingCategory.General, ex, errorMessage);
                throw;
            }
        }

1 个答案:

答案 0 :(得分:1)

尝试在设置内容类型后添加以下内容。

// This is the missing part from your original code to set the charset and encoding - if this does not work, replace it with appropriate value, eg Response.Charset = "utf-8"; Response.ContentEncoding = Encoding.UTF8;

// You might want to use this content type or experiment with appropriate MIME type Response.ContentType = "text/csv";

TQ