【问题标题】:C# exporting to Excel format invalidC#导出为Excel格式无效
【发布时间】:2020-01-03 01:12:33
【问题描述】:

我正在尝试将 datagrid 的数据导出到 C# 中的 Excel 工作表。使用下面的代码我成功导出了它

private void ExportToExcelAndCsv()
        {
            dataGrid.SelectAllCells();
            dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(null, dataGrid);
            String resultat = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
            String result = (string)Clipboard.GetData(DataFormats.Text);
            dataGrid.UnselectAllCells();
            System.IO.StreamWriter file1 = new System.IO.StreamWriter(@"C:\Users\Fisniku\Desktop\"+tipiL+".xls");
            file1.WriteLine(result.Replace(',', ' '));
            file1.Close();
        } 

我的问题是我在 SQLServer 中有一个字符串数据类型的列,其中包含分数格式的数据,例如:

1/2
2/2
1/3
9/4

在 Excel 中导出数据时,该列变为日期,并以自定义格式显示日期 01-Jan 等数据。

尝试将excel中的列修改为文本格式后,丢失值,失效。

如何修改代码,使其保持与 datagrid 中相同的格式?

【问题讨论】:

    标签: c# sql-server excel


    【解决方案1】:

    我假设网格中的这些数据源自基于您问题标签的 SQL 查询或表。如果是这种情况,并且数据是只读的,或者数据位于绑定到网格的数据表中,那么实现此目的的一种简单方法是使用 EPPlus 而不是互操作。

    EPPlus 有一个命令可以将 C# 数据表 (System.Data.DataTable) 导出到电子表格中:

    ws.Cells["A1"].LoadFromDataTable(dt, true);
    

    而且,根据您最初的问题,它尊重数据类型,这意味着它不会破坏包含所有数字的文本字段上的前导零,也不会将看起来像日期的文本转换为日期等。

    如果您不使用数据表,则始终可以将您的内容转换为数据表(尽管这种方法有很多开销)。

    如果您与互操作结婚,那么请确保在粘贴之前将相应的列格式化为文本:

    sheet.Range["A:A"].NumberFormat = "@";
    

    【讨论】:

      【解决方案2】:

      您可能需要将单元格设置为文本格式。看看这个问题: Format an Excel column (or cell) as Text in C#?

      【讨论】:

      • 如果链接失效,这个答案将毫无用处。您应该从中剪下相关文本并将其放入您的答案中。
      • 谢谢Tab,我把答案改成了更好的
      猜你喜欢
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2010-10-25
      • 1970-01-01
      • 2014-02-11
      • 2016-10-24
      相关资源
      最近更新 更多