Microsoft Open SDK 2.0使用c#生成excel文件

时间:2014-01-29 08:59:11

标签: c# excel openxml-sdk

请参考我用于从数据表生成excel文件的代码的链接。我能够成功生成excel文件。

但问题/挑战/问题如下。

  1. 我想按照数据类型生成列,因此如果列值包含日期,则单元格格式应为日期(dd / mm / yyy),如果是数字,则为数字。如此...
  2. 我尝试按照数据格式生成excel文件,您可以看到生成单元格值的特定方法。但问题是当用户下载文件时,它会发出“Excel发现不可读的内容'文件名'的警告信息。你想恢复这个工作簿的内容吗?”。我不希望发出警告信息。
  3. 如果我将所有内容都写成没有格式的文本,那么文件将打开而没有任何警告消息,并且在下载文件后,如果用户尝试格式化日期或数字格式的相应列,那么它也将不允许用户格式化/切片& excel文件中的骰子数据。
  4. 参考: - http://www.codeproject.com/Articles/263106/Export-Tabular-Data-in-CSV-and-Excel-Formats-Throu

    如果有人,请告诉我解决方案。

    我正在使用DocumentFormat.OpenXml.dll

            private Cell CreateTextCell(string header, UInt32 index, string text)
            {
                var cell = new Cell {DataType = CellValues.InlineString, CellReference = header + index};
                var istring = new InlineString();
                var t = new Text {Text = text};
                istring.Append(t);
                cell.Append(istring);
    
                return cell;
            }
    
            private Cell CreateDateCell(string header, UInt32 index, DateTime sDate)
            {
                Cell cell = new Cell();
    
                cell.DataType = CellValues.Date;
                cell.CellReference = header + index;
                cell.StyleIndex = UInt32Value.FromUInt32(14);
                cell.CellValue = new CellValue { Text = sDate.ToOADate().ToString() };
                return cell;
            }
    
    
            private Cell CreateNumberCell(string header, UInt32 index, string text)
            {
                Cell cell = new Cell();
    
                cell.DataType = CellValues.Number;
                cell.CellReference = header + index;
    
                cell.CellValue = new CellValue(text);
    
                return cell;
            }
    

2 个答案:

答案 0 :(得分:0)

我已经转移到EPPlus .net库来生成excel文件,它非常易于使用。

感谢。

答案 1 :(得分:0)

我可能没有完整的解决方案,但您可以尝试以下步骤找到根本原因:

  1. 内容不可读的原因之一(有很多原因,但考虑到你只是从数据表中编写)。如果StyleIndex / Datatype / Cellvalue格式不匹配
  2. 确定您可以尝试的根本原因: 创建一个示例excel并直接写一个带有数字的单元格(只有一个单元格),它会很好,逐个尝试下一个数据类型。 接下来尝试一个接一个地写它们。 执行此操作并对导致问题的类型进行排序。
  3. 接下来尝试使用该类型更改StyleIndex / cellFormat(您可以在线检查示例),直到格式正常且没有错误。一旦你熟悉所有类型,你可以尝试写入整个excel。 如果你想使用OpenXML尝试一些新的东西,你也可以使用这个方法(因为你没有完整记录在线的所有例子)

    识别问题的另一种方法是使用Openxml生产力工具并对文件进行验证。