Откройте XML SDK 2.0 - как обновить ячейку в электронной таблице?

onPrepare и onComplete называются хуками жизненного цикла и выполняются на определенных этапах вашего выполнения. Существует множество хуков жизненного цикла, доступных транспортирующему различными способами, в том числе от репортеров-жасминов, которых вы объявляете, как вы упомянули.

Обзор хуков жизненного цикла и порядок их запуска

--- beforeLaunch           
    --- onPrepare          (set in conf) ***reporters initialized here
      --- jasmineStarted   (set in reporter)
        --- beforeAll
         --- suiteStarted  (set in reporter)
          --- specStarted  (set in reporter)
           --- beforeEach  (set in testFile)
           +++ afterEach   (set in testFile)
          +++ specDone     (set in reporter)
         +++ suiteDone     (set in reporter)
        +++ afterAll
      +++ jasmineDone      (set in reporter)
    +++ onComplete         (set in conf)
+++ afterLaunch

Неясно, в чем заключается ваша проблема, из вашего вопроса, но я предполагаю, что у вас возникли проблемы с вашим репортером HTML потому что вы объявляете это в onComplete. У репортеров Jasmine есть несколько важных хуков жизненного цикла: ( jasmineStarted, jasmineDone, suiteStarted, suiteDone, specStarted, specDone ), но если вы посмотрите на приведенный выше обзор, который я вставил, вы увидите, что эти репортеры жизненного цикла перехватывают все происходит до , вызывается onComplete. Если вы объявите своего репортера в onComplete вместо onPrepare, эти этапы жизненного цикла уже пройдены, и над ними не будет выполнено никаких действий.

Подробнее о назначении крючков жизненного цикла Protractor вы можете прочитать в прикрепленной ссылке. https://github.com/angular/protractor/blob/master/exampleTypescript/conf.ts

и хуки жизненного цикла Jasmine Reporter здесь. https://jasmine.github.io/api/3.3/Reporter.html

Надеюсь, что ответит на ваши вопросы, но дайте мне знать, если меня неправильно поняли.

37
задан Petros Koutsolampros 7 March 2014 в 23:44
поделиться

2 ответа

Вот рабочий код. Это - прототип. Для большего числа изменений можно было бы открыть документ только однажды. Кроме того, существуют некоторые трудно кодированные вещи как имя листа и тип ячейки, который должен был бы быть параметризован, прежде чем это можно назвать готовым к производству. http://openxmldeveloper.org/forums/4005/ShowThread.aspx был очень полезен.

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Xml;
using System.IO;
using System.Diagnostics;

namespace OpenXMLWindowsApp
{
    public class OpenXMLWindowsApp
    {
        public void UpdateSheet()
        {
            UpdateCell("Chart.xlsx", "20", 2, "B");
            UpdateCell("Chart.xlsx", "80", 3, "B");
            UpdateCell("Chart.xlsx", "80", 2, "C");
            UpdateCell("Chart.xlsx", "20", 3, "C");

            ProcessStartInfo startInfo = new ProcessStartInfo("Chart.xlsx");
            startInfo.WindowStyle = ProcessWindowStyle.Normal;
            Process.Start(startInfo);
        }

        public static void UpdateCell(string docName, string text,
            uint rowIndex, string columnName)
        {
            // Open the document for editing.
            using (SpreadsheetDocument spreadSheet = 
                     SpreadsheetDocument.Open(docName, true))
            {
                WorksheetPart worksheetPart = 
                      GetWorksheetPartByName(spreadSheet, "Sheet1");

                if (worksheetPart != null)
                {
                    Cell cell = GetCell(worksheetPart.Worksheet, 
                                             columnName, rowIndex);

                    cell.CellValue = new CellValue(text);
                    cell.DataType = 
                        new EnumValue<CellValues>(CellValues.Number);

                    // Save the worksheet.
                    worksheetPart.Worksheet.Save();
                }
            }

        }

        private static WorksheetPart 
             GetWorksheetPartByName(SpreadsheetDocument document, 
             string sheetName)
        {
            IEnumerable<Sheet> sheets =
               document.WorkbookPart.Workbook.GetFirstChild<Sheets>().
               Elements<Sheet>().Where(s => s.Name == sheetName);

            if (sheets.Count() == 0)
            {
                // The specified worksheet does not exist.

                return null;
            }

            string relationshipId = sheets.First().Id.Value;
            WorksheetPart worksheetPart = (WorksheetPart)
                 document.WorkbookPart.GetPartById(relationshipId);
            return worksheetPart;

        }

        // Given a worksheet, a column name, and a row index, 
        // gets the cell at the specified column and 
        private static Cell GetCell(Worksheet worksheet, 
                  string columnName, uint rowIndex)
        {
            Row row = GetRow(worksheet, rowIndex);

            if (row == null)
                return null;

            return row.Elements<Cell>().Where(c => string.Compare
                   (c.CellReference.Value, columnName + 
                   rowIndex, true) == 0).First();
        }


        // Given a worksheet and a row index, return the row.
        private static Row GetRow(Worksheet worksheet, uint rowIndex)
        {
            return worksheet.GetFirstChild<SheetData>().
              Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
        } 
    }
}
67
ответ дан cdonner 27 November 2019 в 04:30
поделиться
var sheetData = new SheetData();
var row = UpdateCell("A","Hello World", 5);
                sheetData.Append(row);
 worksheet.Append(sheetData);

private static Row UpdateCell(string columnName,string value uint rowIndex)
{
       Row row = new Row { RowIndex = (uint)rowIndex };
       Cell  c1 = new TextCell(columnName, value, rowIndex);
       row.Append(c1);
       return row;            
}

общедоступный класс TextCell: Ячейка {общедоступный TextCell (представляют в виде строки заголовок, строковый текст, международный индекс) {это. DataType = CellValues. InlineString; это. CellReference = заголовок + индекс;//Добавляют текст к текстовой ячейке. это. InlineString = новый InlineString {текст = новый текст {текст = текст}}; }}

0
ответ дан 27 November 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: