标签: openxml

如何使用asp.net创建和下载excel文档

如何使用asp.net创建和下载excel文档?

目的是使用xml,linq或其他任何方式通过浏览器向客户发送excel文档.

编辑:用例

客户在浏览器中加载gridview(使用ajax框架),gridview直接链接到sql数据库.我把一个按钮'export to excel'让客户在他的计算机上保存这个gridview数据我希望启动一个excel的干净下载.

这里提出的解决方案并不干净,比如发送一个html文档并将标题更改为excel文档等,我现在正在搜索一个关于codeplex的简单解决方案,我会告诉你.

c# asp.net excel openxml

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

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

C#openxml删除段落

我试图使用OpenXML从.docx文件中删除段落(我使用一些占位符文本从docx模板文件生成),但每当我删除段落时,它会破坏我用来迭代的foreach循环.

MainDocumentPart mainpart = doc.MainDocumentPart;
IEnumerable<OpenXmlElement> elems = mainPart.Document.Body.Descendants();

foreach(OpenXmlElement elem in elems){
    if(elem is Text && elem.InnerText == "##MY_PLACE_HOLDER##")
    {
        Run run = (Run)elem.Parent;
        Paragraph p = (Paragraph)run.Parent;
        p.RemoveAllChildren();
        p.Remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作,删除我的占位符和它所在的段落,但foreach循环停止迭代.在foreach循环中我需要做更多的事情.

这是正常使用的OpenXML和删除在C#中的段落方式为什么我的foreach循环停止或如何使它不会停止?谢谢.

c# openxml

11
推荐指数
2
解决办法
9313
查看次数

openXML spreadsheetdocument返回字节数组,用于MVC文件下载

我正在尝试将openXML电子表格文档作为byte []返回,然后我可以使用它来允许我的MVC将该文件发送给用户.这是我的spreadsheetdocument方法返回字节数组

using (MemoryStream mem = new MemoryStream())
{
    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.
        Create(mem, SpreadsheetDocumentType.Workbook);

    // Add a WorkbookPart to the document.
    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet(new SheetData());

    // Add Sheets to the Workbook.
    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
        AppendChild<Sheets>(new Sheets());

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

    //row start
    for (int id = 0; id <= reports.Count(); id++)
    {
        if (id == 0)
        {
            Row …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc openxml openxml-sdk asp.net-mvc-4

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

条件格式化颜色渐变与硬停止

我在Excel工作表中有一列数据,其中包含正值和负值.我希望能够做的是应用条件格式(颜色渐变),从深绿色到浅绿色表示正值,浅红色表示深红色表示负值.

但是,我似乎无法做到这一点.如果我将条件格式从最大值应用到零,将零作为浅绿色,那么所有负值也将最终变为浅绿色.有没有一种方法,使一个条件格式仅适用一定值,而不是超越?我可以类似地为负值制作条件格式,但同样会将正值着色为浅红色.如果我在同一张纸上都有,那么哪个优先级最高.

更新:虽然这真的很难看,但我决定试图找出哪些单元格大于0(或实际上是中点值,1.33在这种情况下为〜),哪些单元格较低,并将单元格引用明确设置为这些单元格.所以我尝试了这样的定义条件格式(正绿色标度):

<x:conditionalFormatting sqref="$E$5 $E$6 $E$10 $E$13 $E$15 $E$17 $E$18 $E$19 $E$22 $E$24 $E$25..." xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:cfRule type="colorScale" priority="1">
    <x:colorScale>
      <x:cfvo type="num" val="1.13330279612636" />
      <x:cfvo type="num" val="1.91050388235334" />
      <x:color rgb="d6F4d6" />
      <x:color rgb="148621" />
    </x:colorScale>
  </x:cfRule>
</x:conditionalFormatting>
Run Code Online (Sandbox Code Playgroud)

就像这样(负红色刻度):

<x:conditionalFormatting sqref="$E$4 $E$7 $E$8 $E$9 $E$11 $E$12 $E$14 $E$16 $E$20 $E$21 $E$23 $E$26 $E$28 $E$29 $E$30..." xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:cfRule type="colorScale" priority="1">
    <x:colorScale>
      <x:cfvo type="num" val="0.356101709899376" />
      <x:cfvo type="num" val="1.13330279612636" />
      <x:color rgb="985354" />
      <x:color rgb="f4dddd" />
    </x:colorScale>
  </x:cfRule> …
Run Code Online (Sandbox Code Playgroud)

excel formatting conditional openxml

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

保存从模板生成的OpenXML文档(Word)

我有一些代码将打开Word 2007(docx)文档并更新相应的CustomXmlPart(因此,当它们映射到CustomXmlPart时更新文档本身的内容控件)但无法解决如何将其保存为一个新文件.当然不会那么难!

我目前的想法是,我需要打开模板并将内容复制到一个新的空白文档中 - 逐个文件,在遇到它时更新CustomXmlPart.叫我老式,但听起来有点笨重!

为什么我不能只做一个WordprocessingDocument.SaveAs(filename); ...?

请告诉我,我在这里缺少一些简单的东西.

提前致谢

c# ms-word openxml

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

自动测试OpenXML SDK

我正在使用内容控件和OpenXML SDK实现ms word文档生成.我想对该代码进行一些自动化测试(单元测试或一些简单的UI自动化测试).

有没有人有测试MS Word文档生成的经验?有哪些可能的选择?

提前致谢!

.net ms-word openxml openxml-sdk

10
推荐指数
1
解决办法
1235
查看次数


OpenXML标记搜索

我正在编写一个.NET应用程序,它应该读取200页长的.docx文件(通过DocumentFormat.OpenXML 2.5)来查找文档应该包含的某些标记的所有出现.为了清楚起见,我不是在寻找OpenXML标签,而是寻找应该由文档编写者设置到文档中的标签,作为我需要在第二阶段填写的值的占位符.此类标签应采用以下格式:

 <!TAG!>
Run Code Online (Sandbox Code Playgroud)

(其中TAG可以是任意字符序列).正如我所说,我必须找到所有这些标签的出现加上(如果可能的话)找到已找到标签出现的"页面".我在Web上发现了一些东西,但不止一次基本方法是将文件的所有内容转储到字符串中,然后查看这样的字符串,无论.docx编码如何.这或者导致误报或者根本没有匹配(虽然测试.docx文件包含多个标签),其他示例可能与我对OpenXML的了解有点差异.找到这样的标签的正则表达式模式应该是这样的:

<!(.)*?!>
Run Code Online (Sandbox Code Playgroud)

标签可以在整个文档中找到(在表格,文本,段落内,也可以在页眉和页脚中).

我在Visual Studio 2013 .NET 4.5中进行编码,但如果需要,我可以回来.PS我更喜欢不使用Office Interop API的代码,因为目标平台不会运行Office.

我可以生成的最小.docx示例存储此内部文档

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 wp14">
<w:body>
<w:p w:rsidR="00CA7780" w:rsidRDefault="00815E5D">
  <w:pPr>
    <w:rPr>
      <w:lang w:val="en-GB"/>
    </w:rPr>
  </w:pPr>
  <w:r>
    <w:rPr>
      <w:lang w:val="en-GB"/>
    </w:rPr>
    <w:t>TRY</w:t>
  </w:r>
</w:p>
<w:p w:rsidR="00815E5D" w:rsidRDefault="00815E5D">
  <w:pPr>
    <w:rPr>
      <w:lang w:val="en-GB"/>
    </w:rPr>
  </w:pPr>
  <w:proofErr w:type="gramStart"/>
  <w:r>
    <w:rPr>
      <w:lang w:val="en-GB"/>
    </w:rPr>
    <w:t>&lt;!TAG1</w:t>
  </w:r>
  <w:proofErr w:type="gramEnd"/>
  <w:r>
    <w:rPr>
      <w:lang w:val="en-GB"/> …
Run Code Online (Sandbox Code Playgroud)

.net c# ms-word openxml

10
推荐指数
1
解决办法
4791
查看次数

Ubuntu服务器中的DocumentFormat.OpenXml

我有一个基本的C#应用​​程序,其中使用了Open XML SDK.我想让它在我的Nginx和Ubuntu和DigitalOcean服务器上运行.

该应用程序在Windows中编译并运行良好,而我的Mac在单声道中运行良好.然后,我在Ubuntu服务器上安装了mono,并将.exe文件scp到服务器,然后运行mono ConsoleApplication2.exe,它返回了以下错误:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
File name: 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
 at ConsoleApplication2.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
File name: 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
  at ConsoleApplication2.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
Run Code Online (Sandbox Code Playgroud)

我找到了这个链接,似乎问题来自于版本DocumentFormat.OpenXml.但是我怎么能在Ubuntu服务器上安装正确的版本呢? …

ubuntu mono nginx openxml openxml-sdk

10
推荐指数
1
解决办法
397
查看次数