相关疑难解决方法(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万
查看次数

OpenXML - 在Excel电子表格中写入日期会导致内容不可读

我使用以下代码将日期时间添加到电子表格中的列:

var dt = DateTime.Now;
r.AppendChild<Cell>(new Cell()
    { 
        CellValue = new CellValue(dt.ToOADate().ToString()),
        DataType = new EnumValue<CellValues>(CellValues.Date), 
        StyleIndex = 1,
        CellReference = header[6] + index
    });
Run Code Online (Sandbox Code Playgroud)

当我尝试在Excel 2010中打开该文件时,我收到错误

var dt = DateTime.Now;
r.AppendChild<Cell>(new Cell()
    { 
        CellValue = new CellValue(dt.ToOADate().ToString()),
        DataType = new EnumValue<CellValues>(CellValues.Date), 
        StyleIndex = 1,
        CellReference = header[6] + index
    });
Run Code Online (Sandbox Code Playgroud)

如果我注释掉这一行,一切都很好.

我在StackOverFlow上提到了simiiar问题,但它们基本上和我一样有相同的代码

.net c# openxml

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

C#Open Xml SDK 2.0电子表格设置单元格日期时间格式

我找不到这个.

我的情况:

  • SDK 2.0
  • 没有模板电子表格
  • VS2010中的C#4.0

我的问题:
我想构建的excel文件中的某些数据以DateTime格式存在.因为我不想只使用字符串(弦乐日期时间无法正确排序)我想将包含DateTime的单元格设置为我选择的格式,就像我在excel中所做的那样.
根据我的理解,我必须使用样式表来达到这一点.我已经浏览网页一段时间了,找到一个对这个问题有简单解释的人,但似乎很难找到.

我已经在mem中有一个电子表格,可以通过SheetData添加数据.我唯一缺少的是细胞的格式化/样式化.

这是我得到了多远:

DocumentFormat.OpenXml.Packaging.SpreadsheetDocument doc = SpreadsheetDocument.Create("test.xlsx", SpreadsheetDocumentType.Workbook);

WorkbookPart wbPart = doc.AddWorkbookPart();
wbPart.Workbook = new Workbook();

SheetData data = new SheetData(
            new Row(...etc));

WorksheetPart wsPart = wbPart.AddNewPart<WorksheetPart>();
wsPart.Worksheet = new Worksheet(data);

Sheets sheets = doc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

Sheet sheet = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(wsPart), SheetId = 1, Name = "TestSheet" };
sheets.Append(sheet);

wbPart.Workbook.Save();

doc.Close();
Run Code Online (Sandbox Code Playgroud)

在哪里以及如何在日期时间(例如"dd-MM-yyyy")等样式中添加简单的附加内容,以及稍后可能更高级的样式?

我希望我足够具体:)同时我会继续寻找......

谢谢 !!!

c# openxml-sdk

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

使用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万
查看次数

标签 统计

c# ×4

openxml ×4

openxml-sdk ×3

excel ×2

.net ×1