Reden Rodriguez Ответов: 1

Как установить формат столбца листа excel перед экспортом datatable в excel


Привет извините за длинное название вопроса, кстати, я создал веб-форму, которая может экспортировать все элементы в представлении сетки в файл excel, но в конце концов то, что я сделал, это получить элементы в представлении сетки, поместить их в datatable и экспортировать их в файл excel. Моя проблема заключается в том, что один из столбцов call CarrierCode не находится в правильном формате, он должен быть в числовом формате, а не в общем формате. вот мой код ниже

private void testc()
        {

            List<indexDO> indexDo = getIteminDatagrid();
            DataTable oDataTable = CreateTable();
            DataRow oDataRow;
            foreach (var item in indexDo)
            {
                oDataRow = oDataTable.NewRow();

                oDataRow["ID"] = item.ID;
                oDataRow["ActionCode"] = item.ActionCode;
                oDataRow["BookReferenceNo"] = item.BookReferenceNo;
                oDataRow["BookingStatus"] = item.BookingStatus;
                oDataRow["BookingType"] = item.BookingType;
                oDataRow["CarrierClass"] = item.CarrierClass;
                oDataRow["CarrierCode"] = item.CarrierCode;
                oDataRow["ComRelNo"] = item.ComRelNo;
                oDataRow["ContainerCommodity"] = item.ContainerCommodity;
                oDataRow["ContainerFrom"] = item.ContainerFrom;
                oDataRow["ContainerHistory"] = item.ContainerHistory;
                oDataRow["ContainerNo"] = item.ContainerNo;
                oDataRow["ContainerNo"] = item.ContainerNo;
                oDataRow["ContainerTo"] = item.ContainerTo;
                oDataRow["CreateBookingDate"] = item.CreateBookingDate;
                oDataRow["DateProcessed"] = item.DateProcessed;
                oDataRow["DateReceived"] = item.DateReceived;
                oDataRow["Direction"] = item.Direction;
                oDataRow["GKey"] = item.GKey;
                oDataRow["InGateDateTime"] = item.InGateDateTime;
                oDataRow["LloydNo"] = item.LloydNo;
                oDataRow["LoadOrder"] = item.LoadOrder;
                oDataRow["ModifiedBy"] = item.ModifiedBy;
                oDataRow["ModifiedDate"] = item.ModifiedDate;
                oDataRow["OutGateDateTime"] = item.OutGateDateTime;
                oDataRow["PKey"] = item.PKey;
                oDataRow["PlateNo"] = item.PlateNo;
                oDataRow["RunDateTime"] = item.RunDateTime;
                oDataRow["SecondContainer"] = item.SecondContainer;
                oDataRow["SlotExchangeDate"] = item.SlotExchangeDate;
                oDataRow["SlotExchangeFlag"] = item.SlotExchangeFlag;
                oDataRow["SlotType"] = item.SlotType;
                oDataRow["Status"] = item.Status;
                oDataRow["TerminalID"] = item.TerminalID;
                oDataRow["TimeSlotID"] = item.TimeSlotID;
                oDataRow["TimeZone"] = item.TimeZone;
                oDataRow["VBSUser"] = item.VBSUser;
                oDataRow["VoyageNo"] = item.VoyageNo;

                oDataTable.Rows.Add(oDataRow);
            }
            Response.Clear();
            Response.Buffer = true;
            string excelName = DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Year.ToString() + DateTime.Now.Hour.ToString();
            Response.AddHeader("content-disposition", string.Format("attachment;filename=GridViewExport{0}.xls", excelName));
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excelformats-officedocument.spreadsheetml.sheet";
            using (StringWriter stringWriter = new StringWriter())
            {
                using (HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter))
                {
                    DataGrid oDataGrid = new DataGrid();
                    oDataGrid.DataSource = oDataTable;
                    oDataGrid.DataBind();
                    oDataGrid.RenderControl(htmlWriter);
                    Response.Write(stringWriter.ToString());
                    Response.Flush();
                    Response.End();
                }      
            }
        }


Что я уже пробовал:

i tried to change it to long but i got nothing.

1 Ответов

Рейтинг:
2

Richard Deeming

Вы не экспортируете свои данные в Excel. Вы экспортируете свои данные в HTML, но посылаете заголовок, который "лежит" в браузере и сообщает ему, что ответ-это файл Excel.

Excel сделает все возможное, чтобы импортировать файл, но нет никакой гарантии, что он будет работать, и нет никакого способа контролировать форматирование.

Вместо этого используйте библиотеку, которая генерирует реальный файл Excel - например:
GitHub - JanKallman/EPPlus: создание расширенных электронных таблиц Excel с использованием .NET[^]

DataTable dataTable = ...;

var package = new ExcelPackage();
var sheet = package.Workbook.Worksheets.Add("Data");
sheet.Cells["A1"].LoadFromDataTable(dataTable, true, TableStyles.Medium9);

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
package.SaveAs(Response.OutputStream);
Response.Flush();
Response.End();