相关疑难解决方法(0)

什么表明Office Open XML Cell包含日期/时间值?

我正在使用Office Open XML SDK读取.xlsx文件,并对阅读日期/时间值感到困惑.我的一个电子表格有此标记(由Excel 2010生成)

<x:row r="2" spans="1:22" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:c r="A2" t="s">
    <x:v>56</x:v>
  </x:c>
  <x:c r="B2" t="s">
    <x:v>64</x:v>
  </x:c>
  .
  .
  .
  <x:c r="J2" s="9">
    <x:v>17145</x:v>
  </x:c>
Run Code Online (Sandbox Code Playgroud)

单元格J2具有日期序列值和样式属性s="9".但是,Office Open XML规范称9对应于后面的超链接.这是ECMA-376第4版第499页第1部分 - 基础和标记语言参考 .pdf的屏幕截图.

替代文字

规范中包含的presetCellStyles.xml文件也将builtinId9称为后续超链接.

<followedHyperlink builtinId="9">
Run Code Online (Sandbox Code Playgroud)

规范中的所有样式都只是可视化格式样式,而不是数字样式.定义的数字样式在哪里?如何区分样式引用s="9"与指示单元格格式(可视)样式与数字样式?

显然,我正在寻找错误的地方,以匹配单元格上的样式与其数字格式.哪里是找到这些信息的合适地点?

excel openxml openxml-sdk

42
推荐指数
3
解决办法
4万
查看次数

Open XML SDK 2.0 - 如何更新电子表格中的单元格?

我想使用Open XML SDK 2.0(CT​​P)更新图表使用的电子表格中的单元格.我找到的所有代码示例都插入了新的单元格.我正在努力检索正确的工作表.

public static void InsertText(string docName, string text, uint rowIndex, 
  string columnName)
{
  // Open the document for editing.
  using (SpreadsheetDocument spreadSheet = 
    SpreadsheetDocument.Open(docName, true))
  {
    Workbook workBook = spreadSheet.WorkbookPart.Workbook;

    WorksheetPart worksheetPart = workBook.WorkbookPart.
      WorksheetParts.First();

    SheetData sheetData = worksheetPart.Worksheet.
      GetFirstChild<SheetData>();

    // If the worksheet does not contain a row with the specified
    // row index, insert one.
    Row row;

    if (sheetData.Elements<Row>().Where(
      r => r.RowIndex == rowIndex).Count() != 0)
      // At this point I am expecting a match …
Run Code Online (Sandbox Code Playgroud)

c# xml excel sdk

37
推荐指数
3
解决办法
7万
查看次数

如何在Open XML工作表中插入日期?

我正在使用Microsoft Open XML SDK 2,我很难在单元格中插入日期.我可以通过设置插入数字而没有问题Cell.DataType = CellValues.Number,但是当我对日期(Cell.DataType = CellValues.Date)执行相同操作时Excel 2010崩溃(2007年也是如此).

我尝试将Cell.Text值设置为多种日期格式以及Excel的日期/数字格式无济于事.我也尝试使用样式,删除type属性,以及我扔在墙上的许多其他比萨...

有人能指出我在工作表中插入日期的例子吗?

c# excel openxml openxml-sdk

18
推荐指数
4
解决办法
2万
查看次数

Excel单元格中的OpenXml和Date格式

我正在尝试使用OpenXML以xlsx格式创建Excel文件,因为我需要在Web服务器上使用它.

填写表格中的值没有任何问题; 但是我很难在单元格中设置经典的日期格式.

下面是使用DocumentFormat.OpenXml和WindowsBase引用的快速测试.

class Program
{
    static void Main(string[] args)
    {
        BuildExel(@"C:\test.xlsx");
    }

    public static void BuildExel(string fileName)
    {
        using (SpreadsheetDocument myWorkbook =
               SpreadsheetDocument.Create(fileName,
               SpreadsheetDocumentType.Workbook))
        {
            // Workbook Part
            WorkbookPart workbookPart = myWorkbook.AddWorkbookPart();
            var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
            string relId = workbookPart.GetIdOfPart(worksheetPart);

            // File Version
            var fileVersion = new FileVersion { ApplicationName = "Microsoft Office Excel" };

            // Style Part
            WorkbookStylesPart wbsp = workbookPart.AddNewPart<WorkbookStylesPart>();
            wbsp.Stylesheet = CreateStylesheet();
            wbsp.Stylesheet.Save();

            // Sheets
            var sheets = new Sheets();
            var sheet = …
Run Code Online (Sandbox Code Playgroud)

c# excel-2007 openxml

18
推荐指数
3
解决办法
7万
查看次数

使用MemoryStream创建Open XML电子表格时的Excel和"不可读的内容"

使用Open XML SDK v2.0创建Excel电子表格时,我们的Excel输出最初成功运行了几个月.最近Excel(所有版本)开始抱怨"Excel在'zot.xlsx'中找到了不可读的内容.你想恢复这个工作簿的内容吗?".我们使用MemoryStream作为存储在Web应用程序中创建文件,然后将其作为byte []发送到HTTP响应中,MIME类型为"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".坏文件的解压缩内容与没有错误的文件的解压缩内容相同.

xml excel memorystream openxml openxml-sdk

11
推荐指数
1
解决办法
8424
查看次数

使用OpenXML在Excel单元格中添加日期

这就是我在做的事情:

CellFormat cellFormat = 
                new CellFormat() 
                { NumberFormatId = (UInt32Value)14U, 
                    FontId = (UInt32Value)0U, 
                    FillId = (UInt32Value)0U, 
                    BorderId = (UInt32Value)0U, 
                    FormatId = (UInt32Value)0U, 
                    ApplyNumberFormat = true };

sd.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.AppendChild<CellFormat>(cellFormat);

_dateStyleIndex = sd.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.Count() - 1;
Run Code Online (Sandbox Code Playgroud)

然后在我的代码后面的某个地方

else if (type == DataTypes.DateTime)
{                
    DateTime dateTime = DateTime.Parse(text);
    double oaValue = dateTime.ToOADate();
    cell.CellValue = new CellValue(oaValue.ToString(CultureInfo.InvariantCulture));
    cell.DataType = new EnumValue<CellValues>(CellValues.Date);
    cell.StyleIndex = Convert.ToUInt32(_dateStyleIndex);               
}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用Open XML SDK Tool验证生成的excel文件时,我收到以下验证错误:属性't'具有无效值'd'.枚举约束失败.

我在这里错过了什么?提前谢谢你的帮助.

PS:添加,这就是x:sheetData的样子.它给了我验证错误:

<x:sheetData xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:row r="2">
    <x:c r="B2" t="s">
      <x:v>0</x:v>
    </x:c>
    <x:c r="C2" t="s">
      <x:v>1</x:v>
    </x:c> …
Run Code Online (Sandbox Code Playgroud)

c# excel openxml openxml-sdk

4
推荐指数
1
解决办法
6289
查看次数

OpenXML - 从 Datagridview 导出时更改 Excel 单元格格式(日期和数字)

我使用 OpenXML 将 Datagridview 导出到 Excel。如果我使用 CellValues.String 导出单元格,则一切工作正常,Excel 文件中不会出现任何错误,但我需要的是将所有日期和数字数据正确转换为相应的单元格格式。我尝试使用内置格式(不是自定义格式)来更改单元格格式,但后来我的 Excel 损坏了。

这是我到目前为止所尝试的:

  public void Export_to_Excel(DataGridView dgv, string path)
    {
        using (var workbook = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
        {
            var workbookPart = workbook.AddWorkbookPart();

            workbook.WorkbookPart.Workbook = new Workbook();
            workbook.WorkbookPart.Workbook.Sheets = new Sheets();

            var sheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();
            var sheetData = new SheetData();
            sheetPart.Worksheet = new Worksheet(sheetData);

            Sheets sheets = workbook.WorkbookPart.Workbook.GetFirstChild<Sheets>();
            string relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart);

            uint sheetId = 1;
            if (sheets.Elements<Sheet>().Count() > 0)
            {
                sheetId =
                    sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
            }

            Sheet sheet = new …
Run Code Online (Sandbox Code Playgroud)

c# openxml

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

openxml ×6

c# ×5

excel ×5

openxml-sdk ×4

xml ×2

excel-2007 ×1

memorystream ×1

sdk ×1