【问题标题】:How can I remove "Number Stored as Text" prompt upon Export To Excel using EPPLUS?如何在使用 EPPLUS 导出到 Excel 时删除“数字存储为文本”提示?
【发布时间】:2016-01-27 15:22:05
【问题描述】:

我已经使用 EPPLUS 将我的 gridview 数据导出到 excel,但是对于一些列,在打开导出的 excel 文件后,我有这个绿色标记“数字存储为文本”提示。

由于第一行是标题,我如何在导出到 excel 代码中进行编码以更改从指定列的第二行开始的特定列的数据类型/转换为数字? p>

【问题讨论】:

  • 在您的DataTable DataType 中将其设置为Int。它不会显示.. 它显示的原因是因为在 Excel 中会假设单元格中只有Number 会要求您将其存储为Number 而不是Text
  • 我尝试将其设置为 int,但是由于我的标题是一个字符串,它可以将整个列转换为 int。那么如何排除要排除的excel第一行的标题?

标签: c# asp.net export-to-excel epplus


【解决方案1】:

我也有类似的问题。正如Ordel Eraki 所说:不要字符串化值:

workSheet.Cells[1, 1].Value = 2; // Value is object

workSheet.Cells[1, 1].Value = 2.ToString()

【讨论】:

    【解决方案2】:

    您应该将字符串保存为int 而不是string。每当您希望您的单元格为数字时,只需将您的单元格输入转换为 int

    这意味着,在填充数据时,请务必将其填充为 int

    【讨论】:

    • 您好,我尝试了您的解决方案,但没有任何改变
    • 原因是因为我还有其他列(图中未显示),它们的数据类型是字符串。因此,如果我想更改您的代码。我的字符串会出现错误。谢谢
    • 我也理解您使用的方法,我会看到一个错误,我无法将字符串隐式更改为 int
    • 您好,我尝试填充为 int 但失败了。
    【解决方案3】:

    我已在此处更新了您的代码。
    检查添加的代码..
    已编辑
    我已经更改了您的DataTable 的变量名,假设您正在做的事情..GridView1GridView UI Control,您将DataTable Name 设置为GridView1,代码可能会混淆@987654326 是什么@

    protected void EXPORT_BUTTON_Click(object sender, EventArgs e)
    {
        // Added Code
        int parseValue;
        bool isInt;
    
        ExcelPackage package = new ExcelPackage();
    
        ExcelWorksheet Grid = package.Workbook.Worksheets.Add("ORSA ASSESSMENTS");
    
        DataTable dt = new DataTable();
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            // Update Type
            dt.Columns.Add("column" + i.ToString(), typeof(int));
        }
    
        foreach (GridViewRow row in GridView1.Rows)
        {
            DataRow dr = dt.NewRow();
            for (int j = 0; j < GridView1.Columns.Count; j++)
            {
                row.Cells[j].Text = row.Cells[j].Text.Replace("&nbsp;", " ");
    
                // Added Code
                isInt = int.TryParse(row.Cells[j].Text.Trim(), out parseValue);
    
                // Added Code
                if (isInt) 
                    dr["column" + j.ToString()] = parseValue;
    
            }
    
            dt.Rows.Add(dr);
        }
    
    
        Grid.Cells["A1"].LoadFromDataTable(dt, true);
    
        using (ExcelRange rng = Grid.Cells["A1:Z1"])
        {
            rng.Style.Font.Bold = true;
        }
    
        Grid.Cells[ORSA.Dimension.Address].AutoFitColumns();
    
    
    
        var FolderPath = ServerName + DirectoryLocation + DirectoryFolder + ExportsFolder;
        var filename = ExcelName + @"_" + ".xlsx";
        var filepath = new FileInfo(Path.Combine(FolderPath, filename));
    
        Response.Clear();
        package.SaveAs(filepath);
        Response.AddHeader("content-disposition", "attachment; filename=" + filename + ";");
        Response.Charset = "";
        Response.ContentType = "application/vnd.xlsx";
        Response.TransmitFile(filepath.FullName);
        Response.End();
    
    }
    


    这是我模拟的示例,是一个工作示例

    protected void Page_Load(object sender, EventArgs e)
    {
        // Check
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
    
            // Create Column
            for(int i = 0; i < 5; i++)
                dt.Columns.Add("column" + i, typeof(int));
    
            for (int i = 0; i < 10; i++)
                dt.Rows.Add(i, i+1, i+2, i+3, i+4);
    
            GenerateExcel(dt);
        }
    }
    
    private void GenerateExcel(DataTable dt)
    {
        using (ExcelPackage pkg = new ExcelPackage())
        {
            ExcelWorksheet ws = pkg.Workbook.Worksheets.Add("Sheet1");
    
            ws.Cells[1, 1].LoadFromDataTable(dt, true, OfficeOpenXml.Table.TableStyles.Light18);
    
            pkg.SaveAs(new FileInfo("C:\\Test.xlsx"));
        }
    }
    

    【讨论】:

    • 嗨@Nic,您知道如何为excel中填充的所有单元格设置所有边框吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多