示例#1
0
        public void TestURLsWithHashMark()
        {
            XSSFWorkbook wb = XSSFTestDataSamples.OpenSampleWorkbook("59775.xlsx");
            XSSFSheet    sh = wb.GetSheetAt(0) as XSSFSheet;
            CellAddress  A2 = new CellAddress("A2");
            CellAddress  A3 = new CellAddress("A3");
            CellAddress  A4 = new CellAddress("A4");
            CellAddress  A7 = new CellAddress("A7");

            XSSFHyperlink link = sh.GetHyperlink(A2) as XSSFHyperlink;

            Assert.AreEqual("address", "A2", link.CellRef);
            Assert.AreEqual(HyperlinkType.Url, link.Type, "link type");
            Assert.AreEqual("http://twitter.com/#!/apacheorg", link.Address, "link target");

            link = sh.GetHyperlink(A3) as XSSFHyperlink;
            Assert.AreEqual("address", "A3", link.CellRef);
            Assert.AreEqual(HyperlinkType.Url, link.Type, "link type");
            Assert.AreEqual("http://www.bailii.org/databases.html#ie", link.Address, "link target");

            link = sh.GetHyperlink(A4) as XSSFHyperlink;
            Assert.AreEqual("address", "A4", link.CellRef);
            Assert.AreEqual(HyperlinkType.Url, link.Type, "link type");
            Assert.AreEqual("https://en.wikipedia.org/wiki/Apache_POI#See_also", link.Address, "link target");

            link = sh.GetHyperlink(A7) as XSSFHyperlink;
            Assert.AreEqual("address", "A7", link.CellRef);
            Assert.AreEqual(HyperlinkType.Document, link.Type, "link type");
            Assert.AreEqual("Sheet1", link.Address, "link target");

            wb.Close();
        }
示例#2
0
文件: Program.cs 项目: xoposhiy/npoi
        static void Main(string[] args)
        {
            IWorkbook workbook = new XSSFWorkbook();
            ////cell style for hyperlinks
            ////by default hyperlinks are blue and underlined
            ICellStyle hlink_style = workbook.CreateCellStyle();
            IFont hlink_font = workbook.CreateFont();
            hlink_font.Underline = (byte)FontUnderlineType.SINGLE;
            hlink_font.Color = HSSFColor.BLUE.index;
            hlink_style.SetFont(hlink_font);

            ICell cell;
            ISheet sheet = workbook.CreateSheet("Hyperlinks");

            //URL
            cell = sheet.CreateRow(0).CreateCell(0);
            cell.SetCellValue("URL Link");
            XSSFHyperlink link = new XSSFHyperlink(HyperlinkType.URL);
            link.Address = ("http://poi.apache.org/");
            cell.Hyperlink = (link);
            cell.CellStyle = (hlink_style);

            //link to a file in the current directory
            cell = sheet.CreateRow(1).CreateCell(0);
            cell.SetCellValue("File Link");
            link = new XSSFHyperlink(HyperlinkType.FILE);
            link.Address = ("link1.xls");
            cell.Hyperlink = (link);
            cell.CellStyle = (hlink_style);

            //e-mail link
            cell = sheet.CreateRow(2).CreateCell(0);
            cell.SetCellValue("Email Link");
            link = new XSSFHyperlink(HyperlinkType.EMAIL);
            //note, if subject contains white spaces, make sure they are url-encoded
            link.Address = ("mailto:[email protected]?subject=Hyperlinks");
            cell.Hyperlink = (link);
            cell.CellStyle = (hlink_style);

            //link to a place in this workbook

            //Create a target sheet and cell
            ISheet sheet2 = workbook.CreateSheet("Target ISheet");
            sheet2.CreateRow(0).CreateCell(0).SetCellValue("Target ICell");

            cell = sheet.CreateRow(3).CreateCell(0);
            cell.SetCellValue("Worksheet Link");
            link = new XSSFHyperlink(HyperlinkType.DOCUMENT);
            link.Address = ("'Target ISheet'!A1");
            cell.Hyperlink = (link);
            cell.CellStyle = (hlink_style);

            FileStream sw = File.Create("test.xlsx");
            workbook.Write(sw);
            sw.Close();
        }
示例#3
0
        public void Test53734()
        {
            XSSFWorkbook  wb   = XSSFTestDataSamples.OpenSampleWorkbook("53734.xlsx");
            XSSFHyperlink link = wb.GetSheetAt(0).GetRow(0).GetCell(0).Hyperlink as XSSFHyperlink;

            Assert.AreEqual("javascript:///", link.Address);

            wb   = XSSFTestDataSamples.WriteOutAndReadBack(wb) as XSSFWorkbook;
            link = wb.GetSheetAt(0).GetRow(0).GetCell(0).Hyperlink as XSSFHyperlink;
            Assert.AreEqual("javascript:///", link.Address);
        }
示例#4
0
        public void Test53282()
        {
            XSSFWorkbook  wb   = XSSFTestDataSamples.OpenSampleWorkbook("53282.xlsx");
            XSSFHyperlink link = wb.GetSheetAt(0).GetRow(0).GetCell(14).Hyperlink as XSSFHyperlink;

            Assert.AreEqual("mailto:[email protected]%C2%A0", link.Address);

            wb   = XSSFTestDataSamples.WriteOutAndReadBack(wb) as XSSFWorkbook;
            link = wb.GetSheetAt(0).GetRow(0).GetCell(14).Hyperlink as XSSFHyperlink;
            Assert.AreEqual("mailto:[email protected]%C2%A0", link.Address);
        }
示例#5
0
        public void Test53282()
        {
            //since limitation in .NET Uri class, it's impossible to accept uri like mailto:[email protected]%C2%A0
            XSSFWorkbook  wb   = XSSFTestDataSamples.OpenSampleWorkbook("53282.xlsx");
            XSSFHyperlink link = wb.GetSheetAt(0).GetRow(0).GetCell(14).Hyperlink as XSSFHyperlink;

            Assert.AreEqual("mailto:[email protected]%C2%A0", link.Address);

            wb   = XSSFTestDataSamples.WriteOutAndReadBack(wb) as XSSFWorkbook;
            link = wb.GetSheetAt(0).GetRow(0).GetCell(14).Hyperlink as XSSFHyperlink;
            Assert.AreEqual("mailto:[email protected]%C2%A0", link.Address);
        }
示例#6
0
        public void TestCopyHSSFHyperlink()
        {
            HSSFHyperlink hlink = new HSSFHyperlink(HyperlinkType.Url);

            hlink.Address     = ("http://poi.apache.org/");
            hlink.FirstColumn = (3);
            hlink.FirstRow    = (2);
            hlink.LastColumn  = (5);
            hlink.LastRow     = (6);
            hlink.Label       = ("label");
            XSSFHyperlink xlink = new XSSFHyperlink(hlink);

            Assert.AreEqual("http://poi.apache.org/", xlink.Address);
            Assert.AreEqual(new CellReference(2, 3), new CellReference(xlink.CellRef));
            // Are HSSFHyperlink.label and XSSFHyperlink.tooltip the same? If so, perhaps one of these needs renamed for a consistent Hyperlink interface
            // Assert.AreEqual("label", xlink.Tooltip);
        }
示例#7
0
 /**
  * Create a new XSSFHyperlink. This method is for Internal use only.
  * XSSFHyperlinks can be created by XSSFCreationHelper.
  *
  * @param type - the type of hyperlink to create, see {@link Hyperlink}
  */
 //FIXME: change to protected if/when SXSSFHyperlink class is created
 public XSSFHyperlink(IHyperlink other)
 {
     if (other is XSSFHyperlink)
     {
         XSSFHyperlink xlink = (XSSFHyperlink)other;
         _type        = xlink.Type;
         _location    = xlink._location;
         _externalRel = xlink._externalRel;
         _ctHyperlink = xlink._ctHyperlink.Copy();
     }
     else
     {
         _type        = other.Type;
         _location    = other.Address;
         _externalRel = null;
         _ctHyperlink = new CT_Hyperlink();
         SetCellReference(new CellReference(other.FirstRow, other.FirstColumn));
     }
 }
示例#8
0
        public void Test52716()
        {
            XSSFWorkbook wb1 = XSSFTestDataSamples.OpenSampleWorkbook("52716.xlsx");
            XSSFSheet    sh1 = wb1.GetSheetAt(0) as XSSFSheet;

            XSSFWorkbook wb2 = XSSFTestDataSamples.WriteOutAndReadBack(wb1) as XSSFWorkbook;
            XSSFSheet    sh2 = wb2.GetSheetAt(0) as XSSFSheet;

            Assert.AreEqual(sh1.NumberOfComments, sh2.NumberOfComments);
            XSSFHyperlink l1 = sh1.GetHyperlink(0, 1);

            Assert.AreEqual(HyperlinkType.Document, l1.Type);
            Assert.AreEqual("B1", l1.GetCellRef());
            Assert.AreEqual("Sort on Titel", l1.Tooltip);

            XSSFHyperlink l2 = sh2.GetHyperlink(0, 1);

            Assert.AreEqual(l1.Tooltip, l2.Tooltip);
            Assert.AreEqual(HyperlinkType.Document, l2.Type);
            Assert.AreEqual("B1", l2.GetCellRef());
        }
示例#9
0
        public void TestRemoveHyperlink()
        {
            IWorkbook wb    = new XSSFWorkbook();
            ISheet    sheet = wb.CreateSheet();
            IRow      row   = sheet.CreateRow(0);

            ICell         cell1 = row.CreateCell(1);
            XSSFHyperlink link1 = new XSSFHyperlink(HyperlinkType.Url);

            cell1.Hyperlink = (/*setter*/ link1);
            Assert.IsNotNull(cell1.Hyperlink);
            cell1.RemoveHyperlink();
            Assert.IsNull(cell1.Hyperlink);

            ICell         cell2 = row.CreateCell(0);
            XSSFHyperlink link2 = new XSSFHyperlink(HyperlinkType.Url);

            cell2.Hyperlink = (/*setter*/ link2);
            Assert.IsNotNull(cell2.Hyperlink);
            cell2.Hyperlink = (/*setter*/ null);
            Assert.IsNull(cell2.Hyperlink);

            XSSFTestDataSamples.WriteOutAndReadBack(wb);
        }
示例#10
0
        public void TestCreate()
        {
            XSSFWorkbook       workbook     = new XSSFWorkbook();
            XSSFSheet          sheet        = workbook.CreateSheet() as XSSFSheet;
            XSSFRow            row          = sheet.CreateRow(0) as XSSFRow;
            XSSFCreationHelper CreateHelper = workbook.GetCreationHelper() as XSSFCreationHelper;

            String[] urls =
            {
                "http://apache.org/",
                "www.apache.org",
                "/temp",
                "file:///c:/temp",
                "http://apache.org/default.php?s=isTramsformed&submit=Search&la=*&li=*"
            };
            for (int i = 0; i < urls.Length; i++)
            {
                String        s    = urls[i];
                XSSFHyperlink link = CreateHelper.CreateHyperlink(HyperlinkType.Url) as XSSFHyperlink;
                link.Address = (s);

                XSSFCell cell = row.CreateCell(i) as XSSFCell;
                cell.Hyperlink = (link);
            }
            workbook = XSSFTestDataSamples.WriteOutAndReadBack(workbook) as XSSFWorkbook;
            sheet    = workbook.GetSheetAt(0) as XSSFSheet;
            PackageRelationshipCollection rels = sheet.GetPackagePart().Relationships;

            Assert.AreEqual(urls.Length, rels.Size);
            for (int i = 0; i < rels.Size; i++)
            {
                PackageRelationship rel = rels.GetRelationship(i);
                if (rel.TargetUri.IsAbsoluteUri && rel.TargetUri.IsFile)
                {
                    Assert.AreEqual(urls[i].Replace("file:///", "").Replace("/", "\\"), rel.TargetUri.LocalPath);
                }
                else
                {
                    // there should be a relationship for each URL
                    Assert.AreEqual(urls[i], rel.TargetUri.ToString());
                }
            }

            // Bugzilla 53041: Hyperlink relations are duplicated when saving XSSF file
            workbook = XSSFTestDataSamples.WriteOutAndReadBack(workbook) as XSSFWorkbook;
            sheet    = workbook.GetSheetAt(0) as XSSFSheet;
            rels     = sheet.GetPackagePart().Relationships;
            Assert.AreEqual(urls.Length, rels.Size);
            for (int i = 0; i < rels.Size; i++)
            {
                PackageRelationship rel = rels.GetRelationship(i);
                if (rel.TargetUri.IsAbsoluteUri && rel.TargetUri.IsFile)
                {
                    Assert.AreEqual(urls[i].Replace("file:///", "").Replace("/", "\\"), rel.TargetUri.LocalPath);
                }
                else
                {
                    // there should be a relationship for each URL
                    Assert.AreEqual(urls[i], rel.TargetUri.ToString());
                }
            }
        }
示例#11
0
文件: XSSFCell.cs 项目: founshi/npoi
        /// <summary>
        /// Copy cell value, formula and style, from srcCell per cell copy policy
        ///  If srcCell is null, clears the cell value and cell style per cell copy policy
        ///
        /// This does not shift references in formulas. Use {@link XSSFRowShifter} to shift references in formulas.
        /// </summary>
        /// <param name="srcCell">The cell to take value, formula and style from</param>
        /// <param name="policy">The policy for copying the information, see {@link CellCopyPolicy}</param>
        /// <exception cref="ArgumentException">if copy cell style and srcCell is from a different workbook</exception>
        public void CopyCellFrom(ICell srcCell, CellCopyPolicy policy)
        {
            // Copy cell value (cell type is updated implicitly)
            if (policy.IsCopyCellValue)
            {
                if (srcCell != null)
                {
                    CellType copyCellType = srcCell.CellType;
                    if (copyCellType == CellType.Formula && !policy.IsCopyCellFormula)
                    {
                        // Copy formula result as value
                        // FIXME: Cached value may be stale
                        copyCellType = srcCell.CachedFormulaResultType;
                    }
                    switch (copyCellType)
                    {
                    case CellType.Boolean:
                        SetCellValue(srcCell.BooleanCellValue);
                        break;

                    case CellType.Error:
                        SetCellErrorValue(srcCell.ErrorCellValue);
                        break;

                    case CellType.Formula:
                        SetCellFormula(srcCell.CellFormula);
                        break;

                    case CellType.Numeric:
                        // DataFormat is not copied unless policy.isCopyCellStyle is true
                        if (DateUtil.IsCellDateFormatted(srcCell))
                        {
                            SetCellValue(srcCell.DateCellValue);
                        }
                        else
                        {
                            SetCellValue(srcCell.NumericCellValue);
                        }
                        break;

                    case CellType.String:
                        SetCellValue(srcCell.StringCellValue);
                        break;

                    case CellType.Blank:
                        SetBlank();
                        break;

                    default:
                        throw new ArgumentException("Invalid cell type " + srcCell.CellType);
                    }
                }
                else
                { //srcCell is null
                    SetBlank();
                }
            }

            // Copy CellStyle
            if (policy.IsCopyCellStyle)
            {
                if (srcCell != null)
                {
                    CellStyle = (srcCell.CellStyle);
                }
                else
                {
                    // clear cell style
                    CellStyle = (null);
                }
            }


            if (policy.IsMergeHyperlink)
            {
                // if srcCell doesn't have a hyperlink and destCell has a hyperlink, don't clear destCell's hyperlink
                IHyperlink srcHyperlink = srcCell.Hyperlink;
                if (srcHyperlink != null)
                {
                    Hyperlink = new XSSFHyperlink(srcHyperlink);
                }
            }
            else if (policy.IsCopyHyperlink)
            {
                // overwrite the hyperlink at dest cell with srcCell's hyperlink
                // if srcCell doesn't have a hyperlink, clear the hyperlink (if one exists) at destCell
                IHyperlink srcHyperlink = srcCell.Hyperlink;
                if (srcHyperlink == null)
                {
                    Hyperlink = (null);
                }
                else
                {
                    Hyperlink = new XSSFHyperlink(srcHyperlink);
                }
            }
        }
示例#12
0
文件: XSSFSheet.cs 项目: kenlen/npoi
        /**
         * Register a hyperlink in the collection of hyperlinks on this sheet
         *
         * @param hyperlink the link to add
         */

        public void AddHyperlink(XSSFHyperlink hyperlink)
        {
            hyperlinks.Add(hyperlink);
        }
示例#13
0
        public void TestRemoveHyperlink()
        {
            IWorkbook wb = new XSSFWorkbook();
            ISheet sheet = wb.CreateSheet();
            IRow row = sheet.CreateRow(0);

            ICell cell1 = row.CreateCell(1);
            XSSFHyperlink link1 = new XSSFHyperlink(HyperlinkType.Url);
            cell1.Hyperlink = (/*setter*/link1);
            Assert.IsNotNull(cell1.Hyperlink);
            cell1.RemoveHyperlink();
            Assert.IsNull(cell1.Hyperlink);

            ICell cell2 = row.CreateCell(0);
            XSSFHyperlink link2 = new XSSFHyperlink(HyperlinkType.Url);
            cell2.Hyperlink = (/*setter*/link2);
            Assert.IsNotNull(cell2.Hyperlink);
            cell2.Hyperlink = (/*setter*/null);
            Assert.IsNull(cell2.Hyperlink);

            XSSFTestDataSamples.WriteOutAndReadBack(wb);
        }