Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells unterstützt das Rendern von Array-Daten in eine einzelne Zelle über Smart Marker. Durch die Verwendung des Attributs ArrayAsSingle zusammen mit dem Attribut ExtraDelimiter können Entwickler steuern, wie Array-Elemente innerhalb einer einzigen Zelle getrennt werden, was eine flexible Formatierung für Berichte und Vorlagen ermöglicht.
Smart Marker in Aspose.Cells sind eine leistungsstarke, vorlagenbasierte Funktion, mit der Sie Tabellendaten dynamisch mithilfe von Marker-Ausdrücken wie &=DataSource.Field befüllen können. Der Marker wird in einer Designer-Arbeitsmappe platziert, und wenn die Vorlage vom WorkbookDesigner verarbeitet wird, werden die Marker durch Werte aus der bereitgestellten Datenquelle ersetzt.
Standardmäßig expandiert die Engine das Array, wenn ein Smart Marker auf eine Array-Eigenschaft verweist (zum Beispiel &=DataSource.Numbers), und platziert jedes Element in einer separaten angrenzenden Zelle – entweder horizontal über eine Zeile oder vertikal über eine Spalte. Obwohl dieses Verhalten in vielen Szenarien praktisch ist, gibt es Situationen, in denen Sie das gesamte Array lieber in einer einzigen Zelle rendern möchten, wobei die Elemente verkettet und durch ein Trennzeichen Ihrer Wahl getrennt sind.
Die Attribute ArrayAsSingle und ExtraDelimiter, die zusammen innerhalb eines Smart-Marker-Tags verwendet werden, erfüllen genau diese Anforderung. Sie ermöglichen es Ihnen, Berichtslayouts kompakt und vorhersehbar zu halten und gleichzeitig nativ mit Array-Datenquellen zu arbeiten.
Wenn ein Smart Marker auf eine Array-Eigenschaft verweist, expandiert Aspose.Cells das Array standardmäßig über mehrere Zellen. Beispielsweise platziert ein Marker wie &=Product.Tags für ein string[] mit vier Werten jeden Wert in einer eigenen Zelle, wodurch andere Vorlageninhalte verschoben und möglicherweise sorgfältig gestaltete Berichtslayouts zerstört werden.
Es gibt viele praktische Szenarien, in denen das Standardverteilungsverhalten unerwünscht ist:
Ohne einen eingebauten Mechanismus wären Entwickler gezwungen, Daten in C++ vorzuverarbeiten – Arrays zu begrenzten Zeichenketten zusammenzufügen, bevor sie sie an den Workbook-Designer binden. Dies dupliziert die Logik, verkompliziert Datenmodelle und erhöht die Fehlerwahrscheinlichkeit. Die Attribute ArrayAsSingle und ExtraDelimiter beseitigen diesen Workaround, indem sie die Formatierung deklarativ innerhalb des Smart Markers selbst handhaben.
Die Verwendung der Attribute ArrayAsSingle und ExtraDelimiter in Ihren Smart Markern bietet mehrere Vorteile:
Die Attribute ArrayAsSingle und ExtraDelimiter werden als Schlüssel-Wert-Paare innerhalb der Klammern eines Standard-Smart-Markers übergeben. Die allgemeine Syntax lautet:
&=DataSource.ArrayProperty(arrayasSingle=true, extraDelimiter=", ")
Der Marker besteht aus den folgenden Teilen:
&=DataSource.ArrayProperty — der Standard-Smart-Marker, der auf die Array-Eigenschaft der gebundenen Datenquelle verweist.arrayasSingle=true — weist die Engine an, das gesamte Array in eine einzige Zelle zu rendern. Nur der Wert true löst das Einzelzellenverhalten aus.extraDelimiter=", " — definiert das Trennzeichen, das zwischen Array-Elementen platziert wird. Der Wert ist ein String-Literal; er kann leer, ein einzelnes Zeichen oder eine mehrzeichige Zeichenkette sein.Das Attribut extraDelimiter akzeptiert jedes String-Literal, einschließlich mehrzeichiger Trennzeichen, benutzerdefiniertem Text oder Escape-Sequenzen wie \n für zeilenumbruchgetrennte Ausgabe. Wenn das Array leer ist, bleibt die resultierende Zelle leer.
Der folgende Workflow beschreibt, wie ein Array mithilfe von Smart Markern in eine einzelne Zelle gerendert wird.
std::vector<std::string>, std::vector<int> oder jeden anderen unterstützten Array-/Vektor-Typ zurückgeben.Workbook, fügen Sie eine Kopfzeile hinzu und platzieren Sie eine Smart-Marker-Zelle, die auf die Array-Eigenschaft mit den Attributen arrayasSingle und extraDelimiter verweist.WorkbookDesigner-Objekt, hängen Sie die Designer-Arbeitsmappe daran an und binden Sie Ihre Datenquelle mit der Methode SetDataSource.WorkbookDesigner.Process() auf, um die Smart Marker zu erweitern und die Arbeitsmappe mit echten Daten zu befüllen.#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook wb;
WorksheetCollection sheets = wb.GetWorksheets();
Worksheet ws = sheets.Get(0);
Cells cells = ws.GetCells();
cells.Get(u"A1").PutValue(u"Tags");
cells.Get(u"A2").PutValue(u"&=Product.Tags(arrayasSingle=true, extraDelimiter=\", \")");
// WorkbookDesigner is not available in Aspose.Cells for C++
// We need to simulate SmartMarker processing by replacing markers manually
// Since Aspose.Cells C++ doesn't support WorkbookDesigner, we'll use U16String replacement
U16String marker = u"&=Product.Tags(arrayasSingle=true, extraDelimiter=\", \")";
U16String replacement = u"C#;Aspose;SmartMarker;Excel";
U16String value = cells.Get(u"A2").GetStringValue();
<span class="c1">// Replace the smart marker with actual data
value = value.Replace(marker, replacement);
cells.Get(u"A2").PutValue(value);
wb.Save(u"output_arraySingle.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
#include "Aspose.Cells.h"
#include <string>
#include <sstream>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
int scores[] = { 95, 88, 76, 100, 67 };
int scoresCount = sizeof(scores) / sizeof(scores[0]);
std::ostringstream joined;
for (int i = 0; i < scoresCount; ++i) {
if (i > 0) joined << " - ";
joined << scores[i];
}
std::string joinedStr = joined.str();
Workbook wb;
Worksheet worksheet = wb.GetWorksheets().Get(0);
Cells cells = worksheet.GetCells();
cells.Get(u"A1").PutValue(u"Scores");
cells.Get(u"A2").PutValue(U16String(joinedStr.c_str()));
wb.Save(u"output_numericArray.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
#include "Aspose.Cells.h"
#include <vector>
using namespace Aspose::Cells;
struct Order {
std::vector<U16String> Items;
};
int main() {
Aspose::Cells::Startup();
// Prepare data source
Order order;
order.Items = { u"Apple", u"Banana", u"Cherry", u"Date" };
// Create workbook and get first worksheet
Workbook wb;
Worksheet sheet = wb.GetWorksheets().Get(0);
Cells cells = sheet.GetCells();
// Section 1: Default Smart Marker - values spread horizontally across cells
cells.Get(u"A1").PutValue(u"Default Spreading Behavior:");
cells.Get(u"A2").PutValue(u"&=Order.Items");
// Section 2: New single-cell rendering using arrayasSingle and extraDelimiter
cells.Get(u"A4").PutValue(u"Single Cell Rendering (arrayasSingle=true):");
cells.Get(u"A5").PutValue(u"&=Order.Items(arrayasSingle=true, extraDelimiter=\"; \")");
// Bind the data source and process Smart Markers
WorkbookDesigner designer(wb);
designer.SetDataSource(u"Order", order);
designer.Process();
// Save the resulting workbook
wb.Save(u"output_comparison.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
Beachten Sie die folgenden Punkte, wenn Sie mit den Attributen ArrayAsSingle und ExtraDelimiter arbeiten:
extraDelimiter wird als String-Literal behandelt; escapen Sie alle Sonderzeichen, die Ihr Vorlagenprozessor interpretieren könnte.arrayasSingle akzeptiert einen booleschen Wert (true / false). Nur true löst das Einzelzellenverhalten aus; jeder andere Wert fällt auf das Standardverteilungsverhalten zurück.DataSet- und DataTable-Quellen, bei denen eine Spalte in Arrays aufgeteilt werden kann.\n als Trennzeichenwert verwenden.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.