Вы можете выполнить задачу, используя функцию Smart Markers от Aspose.Cells. Все, что вам нужно сделать, это создать именованные диапазоны на основе ваших интеллектуальных маркеров, вставленных в ячейки. Я написал пример кода с использованием API Aspose.Cells для ваших требований. Пожалуйста, обратитесь к нему, и вы можете добавить/обновить сегмент кода соответственно для своих нужд.
например
Пример кода:
DataTable dt = new DataTable("Trend");
dt.Columns.Add("Period", typeof(string));
dt.Columns.Add("Points", typeof(int));
DataRow row = dt.NewRow();
row[0] = "4Q'14";
row[1] = 27;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "1Q'15";
row[1] = 0;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "2Q'15";
row[1] = 0;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "3Q'15";
row[1] = 0;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "4Q'15";
row[1] = 200;
dt.Rows.Add(row);
WorkbookDesigner wd = new WorkbookDesigner();
//Create a designer workbook
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
worksheet.Cells["A1"].PutValue("Period");
worksheet.Cells["A2"].PutValue("&=Trend.Period");
worksheet.Cells["B1"].PutValue("Points");
worksheet.Cells["B2"].PutValue("&=Trend.Points");
Range range1 = worksheet.Cells.CreateRange("A2:A2");
range1.Name = "RANGE1";
Range range2 = worksheet.Cells.CreateRange("B2:B2");
range2.Name = "RANGE2";
wd.Workbook = workbook;
wd.SetDataSource(dt);
wd.Process();
//Create chart
int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 2, 29, 10);
Chart chart = worksheet.Charts[chartIndex];
//Obtain the updated ranges after processing smart markers
var r1 = workbook.Worksheets.GetRangeByName("RANGE1");
var r2 = workbook.Worksheets.GetRangeByName("RANGE2");
MessageBox.Show(r2.RefersTo);
//Add the nseries collection to a chart
chart.NSeries.Add(r2.RefersTo, true);
//Get or set the range of category axis values
chart.NSeries.CategoryData = r1.RefersTo;
chart.NSeries.IsColorVaried = true;
wd.Workbook.Save("e:\\test2\\out1chart1.xlsx");
Я работаю разработчиком Поддержка/Евангелиста в Aspose.
Hi Amjad, следующий вопрос, можем ли мы скрыть эту таблицу, если у нее нет данных? Эта таблица относится к большой электронной таблице, а на листе содержится более 20 таблиц, подобных этому, и мой клиент хочет скрыть эти пустые таблицы. Это выполнимо? Насколько я знаю, я могу поместить каждую таблицу в отдельный лист, но в некоторых случаях может генерировать более 10 листов. – Yan
Вы хотите сказать, чтобы скрыть Smart Markers, например «& = Trend.Period» и «& = Trend.Points» в ячейках? Ну, если в базовой таблице нет записи, Smart Markers будут удалены из этих ячеек (A2 и B2). И если вам не нужно создавать диаграмму, если в таблице данных нет записи, вы можете просто проверить (в своем коде), используя атрибут DataTable.Rows.Count, если таблица пуста, поэтому вам не следует создавать диаграмму через API Aspose.Cells. –
Я имею в виду, например, если в моем листе 15 таблиц, если в одной таблице нет данных, можем ли мы скрыть это? Клиент говорит, что это раздражает видеть эти пустые таблицы, потому что на веб-странице мы динамически скрываем эти таблицы в соответствии с настройками каждого пользователя. – Yan