2017-02-01 4 views
1

Ich habe großen Bericht und jede Zeile enthält Hyperlink.ssrs report export zu übertreffen - gebrochene hyperlinks

Bericht, der 50k oder mehr Zeilen enthält, wird exportiert, um zu übertreffen.

Nach dem Export versuche ich xlsx Datei zu öffnen und bekomme eine Meldung, dass die Datei Fehler enthält. Es schlägt auch vor, Wiederherstellung der Datei

Nach Wiederherstellung Nachricht zeigt, dass Hyperlinks entfernt wurden. Ich kann Dateien öffnen, aber Links funktionieren nicht mehr.

Ich habe versucht, exportierte Datei mit C# openxml sdk Bibliothek zu öffnen und bekam zu sagen Fehlermeldung, dass die Datei unvollständig Element enthält, aber ich war nicht in der Lage, welches Element es ist

jedoch zu finden, wenn Bericht weniger als 49k Zeilen hat, exportierte Datei wird erfolgreich geöffnet und alle Hyperlinks funktionieren. Wenn Bericht in pdf oder doc exportiert wird, funktionieren auch Hyperlinks Ich benutze Berichtsserver vesion 12.0.2269.0

Weiß jemand, wie man dieses Problem löst?

Antwort

1

In der Regel, wenn ich diese Art von Problem nach einer Excel-Datei von SSRS exportiert habe, finde ich, dass etwas in den Daten, mit denen Excel ist aufgetreten ist. Ein versteckter Charakter vielleicht. Der Export funktioniert, die Datei wird geöffnet, wenn das Problem auftritt.

Um mit dieser Situation umzugehen, habe ich eine benutzerdefinierte Funktion (UDF) in SQL Server erstellt, um alle Zeichen zu entfernen, von denen ich weiß, dass Excel sich ersticken wird. Unten ist ein Beispiel für eines, das ich benutze.

CREATE FUNCTION [dbo].[udf_CleanData] 
(
    @data text 
) 

RETURNS varchar(max) 

AS 

BEGIN 
    DECLARE @cdata varchar(max) = @data 

    SELECT @cdata = REPLACE(@cdata, char(20), '') -- double quote 
    SELECT @cdata = REPLACE(@cdata, char(21), '') -- bullet 
    SELECT @cdata = REPLACE(@cdata, char(13), '') -- carriage return 
    SELECT @cdata = REPLACE(@cdata, char(10), '') -- line feed 
    SELECT @cdata = REPLACE(@cdata, char(18), '') -- single quote right 
    SELECT @cdata = REPLACE(@cdata, char(17), '') -- single quote left 
    SELECT @cdata = REPLACE(@cdata, char(22), '') -- dash 

    RETURN @cdata 
END 

Sie können dies beliebig anpassen, um Ihre Anforderungen zu erfüllen. Dies funktioniert genau so, wie ich es brauche, und das bedeutet, dass alle merkwürdigen Zeichen in einem Textfeld entfernt werden, die das Entwicklerteam für die Formatierung in der Frontend-Anwendung verwenden würde.

Verbrauch:

SELECT dbo.udf_CleanData(Field1) AS CleanField1 FROM Table1

Wenn der Hyperlink Sie berichten, etwas Ungewöhnliches in sich hat, könnte dies, dass entfernen. Wenn Sie den Hyperlink aus verschiedenen Datenbereichen erstellen, müssen möglicherweise einige oder alle Felder bereinigt werden. Dies ist etwas, wo Sie ein bisschen Versuch und Irrtum durchlaufen müssen.

Andere Zeiten, in denen ich dieses Problem gehabt haben, gibt es einen Ausdruck in der RDL, die entweder die Berechnung endet NaN oder Unendlichkeit. Die Excel-Datei nach dem Export scheint mit diesem außer Problem zu haben, wenn eine ältere Version von Excel, wie 2003

Der beste Weg, den Export dieser Situation umgehen wird Ihre Ausdrücke anpassen, um die Möglichkeit zu prüfen, ob der Endwert könnte aus dem Gleichgewicht geraten und den Wert auf etwas anderes setzen, oder den Wert auf etwas Vernünftiges runden. Dies ist vergleichbar mit der Überprüfung, dass ein Nenner vor der Division nicht null ist.

=IIf(Fields!Total.Value > 0, Fields!Count.Value/Fields!Total.Value, 0)

Es gibt viele Fragen über diese Art der Sache mit guten Lösungen hier auf SO, also werde ich eine Reihe von Ausdrücken hier im Zusammenhang mit Datenprüfung nicht auflisten.

Der andere Weg, dies zu handhaben ist, immer in eine frühere Version von Excel zu exportieren, aber das ist möglicherweise keine einfache Option oder eine Option überhaupt. Normalerweise sehe ich das nur als Option für ein Berichtsabonnement, aber nicht für die Entwicklungstools.

Viel Glück für Sie!

0

Ich habe auch dieses Problem beim Exportieren von SSRS-Berichten nach Excel konfrontiert. Der Grund, in meinem Fall war, dass Excel nur 66.530 Hyperlinks verarbeiten kann -

https://support.office.com/en-us/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3#ID0EBABAAA=2016,_2013

bestätigt erneut, wenn Sie dieses Problem bekommen, sobald Sie über 50k gehen (in diesem Fall der Grund könnte sein, was R Richards schon sagt), oder wenn es sich um 66530-Links handelt, die zum Bruch der Tabelle führen.

Ich habe einen Weg gefunden, um diese Begrenzung von Excel zu umgehen, so dass die einzige Möglichkeit, die ich mir vorstellen kann, dies zu lösen ist, keine Hyperlinks in der exportierten Excel-Datei zu haben.

Wenn Sie in der exportierten Datei ohne Hyperlinks leben können, können Sie sie im Bericht mithilfe der Globals! RenderFormat-Eigenschaft des SSRS-Berichts deaktivieren. Der Ausdruck, der für die Zellen verwendet werden soll, um keine Hyperlinks zu haben, wenn das angeforderte Format EXCEL lautet, lautet -