用于生成 Office 文件的 .NET 组件。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
8.4 KiB

/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for Additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
using NUnit.Framework;
using System.Collections.Generic;
using NPOI.OpenXmlFormats.Vml;
using NPOI.OpenXmlFormats.Vml.Office;
using System.IO;
using TestCases;
using System.Collections;
using NPOI.OpenXmlFormats.Vml.Spreadsheet;
namespace NPOI.XSSF.UserModel
{
/**
* @author Yegor Kozlov
*/
[TestFixture]
public class TestXSSFVMLDrawing
{
[Test]
public void TestNew()
{
XSSFVMLDrawing vml = new XSSFVMLDrawing();
ArrayList items = vml.GetItems();
Assert.AreEqual(2, items.Count);
Assert.IsTrue(items[0] is CT_ShapeLayout);
CT_ShapeLayout layout = (CT_ShapeLayout)items[0];
Assert.AreEqual(ST_Ext.edit, layout.ext);
Assert.AreEqual(ST_Ext.edit, layout.idmap.ext);
Assert.AreEqual("1", layout.idmap.data);
Assert.IsTrue(items[1] is CT_Shapetype);
CT_Shapetype type = (CT_Shapetype)items[1];
Assert.AreEqual("21600,21600", type.coordsize);
Assert.AreEqual(202.0f, type.spt);
Assert.AreEqual("m,l,21600r21600,l21600,xe", type.path2);
Assert.IsTrue(type.id.StartsWith("_x0000_"));
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, type.path.gradientshapeok);
Assert.AreEqual(ST_ConnectType.rect, type.path.connecttype);
CT_Shape shape = vml.newCommentShape();
Assert.AreEqual(3, items.Count);
Assert.AreSame(items[2], shape);
Assert.IsTrue(shape.type.StartsWith("#_x0000_"));
Assert.AreEqual("position:absolute; visibility:hidden", shape.style);
Assert.AreEqual("#ffffe1", shape.fillcolor);
Assert.AreEqual(ST_InsetMode.auto, shape.insetmode);
Assert.AreEqual("#ffffe1", shape.fill.color);
CT_Shadow shadow = shape.shadow;
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, shadow.on);
Assert.AreEqual("black", shadow.color);
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, shadow.obscured);
Assert.AreEqual(ST_ConnectType.none, shape.path.connecttype);
Assert.AreEqual("mso-direction-alt:auto", shape.textbox.style);
CT_ClientData cldata = shape.GetClientDataArray(0);
Assert.AreEqual(ST_ObjectType.Note, cldata.ObjectType);
Assert.AreEqual(1, cldata.SizeOfMoveWithCellsArray());
Assert.AreEqual(1, cldata.SizeOfSizeWithCellsArray());
Assert.AreEqual("1, 15, 0, 2, 3, 15, 3, 16", cldata.anchor);
Assert.AreEqual(ST_TrueFalseBlank.@false, cldata.autoFill);
Assert.AreEqual(0, cldata.GetRowArray(0));
Assert.AreEqual(0, cldata.GetColumnArray(0));
//serialize and read again
MemoryStream out1 = new MemoryStream();
vml.Write(out1);
XSSFVMLDrawing vml2 = new XSSFVMLDrawing();
vml2.Read(new MemoryStream(out1.ToArray()));
ArrayList items2 = vml2.GetItems();
Assert.AreEqual(3, items2.Count);
Assert.IsTrue(items2[0] is CT_ShapeLayout);
Assert.IsTrue(items2[1] is CT_Shapetype);
Assert.IsTrue(items2[2] is CT_Shape);
}
[Test]
public void TestFindCommentShape()
{
XSSFVMLDrawing vml = new XSSFVMLDrawing();
vml.Read(POIDataSamples.GetSpreadSheetInstance().OpenResourceAsStream("vmlDrawing1.vml"));
CT_Shape sh_a1 = vml.FindCommentShape(0, 0);
Assert.IsNotNull(sh_a1);
Assert.AreEqual("_x0000_s1025", sh_a1.id);
CT_Shape sh_b1 = vml.FindCommentShape(0, 1);
Assert.IsNotNull(sh_b1);
Assert.AreEqual("_x0000_s1026", sh_b1.id);
CT_Shape sh_c1 = vml.FindCommentShape(0, 2);
Assert.IsNull(sh_c1);
CT_Shape sh_d1 = vml.newCommentShape();
Assert.AreEqual("_x0000_s1027", sh_d1.id);
sh_d1.GetClientDataArray(0).SetRowArray(0, 0);
sh_d1.GetClientDataArray(0).SetColumnArray(0, 3);
Assert.AreSame(sh_d1, vml.FindCommentShape(0, 3));
//newly created drawing
XSSFVMLDrawing newVml = new XSSFVMLDrawing();
Assert.IsNull(newVml.FindCommentShape(0, 0));
sh_a1 = newVml.newCommentShape();
Assert.AreEqual("_x0000_s1025", sh_a1.id);
sh_a1.GetClientDataArray(0).SetRowArray(0, 0);
sh_a1.GetClientDataArray(0).SetColumnArray(0, 1);
Assert.AreSame(sh_a1, newVml.FindCommentShape(0, 1));
}
[Test]
public void TestRemoveCommentShape()
{
XSSFVMLDrawing vml = new XSSFVMLDrawing();
vml.Read(POIDataSamples.GetSpreadSheetInstance().OpenResourceAsStream("vmlDrawing1.vml"));
CT_Shape sh_a1 = vml.FindCommentShape(0, 0);
Assert.IsNotNull(sh_a1);
Assert.IsTrue(vml.RemoveCommentShape(0, 0));
Assert.IsNull(vml.FindCommentShape(0, 0));
}
[Test]
public void TestCommentShowsBox()
{
XSSFWorkbook wb = new XSSFWorkbook();
wb.CreateSheet();
XSSFSheet sheet = (XSSFSheet)wb.GetSheetAt(0);
XSSFCell cell = (XSSFCell)sheet.CreateRow(0).CreateCell(0);
XSSFDrawing drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch();
XSSFCreationHelper factory = (XSSFCreationHelper)wb.GetCreationHelper();
XSSFClientAnchor anchor = (XSSFClientAnchor)factory.CreateClientAnchor();
anchor.Col1 = cell.ColumnIndex;
anchor.Col2 = cell.ColumnIndex + 3;
anchor.Row1 = cell.RowIndex;
anchor.Row2 = cell.RowIndex + 5;
XSSFComment comment = (XSSFComment)drawing.CreateCellComment(anchor);
XSSFRichTextString str = (XSSFRichTextString)factory.CreateRichTextString("this is a comment");
comment.String = str;
cell.CellComment = comment;
XSSFVMLDrawing vml = sheet.GetVMLDrawing(false);
CT_Shapetype shapetype = null;
ArrayList items = vml.GetItems();
foreach (object o in items)
if (o is CT_Shapetype)
shapetype = (CT_Shapetype)o;
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, shapetype.stroked);
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, shapetype.filled);
using (MemoryStream ws = new MemoryStream())
{
wb.Write(ws);
using (MemoryStream rs = new MemoryStream(ws.GetBuffer()))
{
wb = new XSSFWorkbook(rs);
sheet = (XSSFSheet)wb.GetSheetAt(0);
vml = sheet.GetVMLDrawing(false);
shapetype = null;
items = vml.GetItems();
foreach (object o in items)
if (o is CT_Shapetype)
shapetype = (CT_Shapetype)o;
//wb.Write(new FileStream("comments.xlsx", FileMode.Create));
//using (MemoryStream ws2 = new MemoryStream())
//{
// vml.Write(ws2);
// throw new System.Exception(System.Text.Encoding.UTF8.GetString(ws2.GetBuffer()));
//}
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, shapetype.stroked);
Assert.AreEqual(NPOI.OpenXmlFormats.Vml.ST_TrueFalse.t, shapetype.filled);
}
}
}
}
}