Forum Support

Unsere freien Joomla! Erweiterungen sind ausgiebig dokumentiert und verfügen über eine sehr ausführliche Online-Dokumentation in der Administrationsoberfläche. Wird über diese frei zugänglichen Informationen hinaus individuelle Hilfe bei der Nutzung unserer freien Joomla! Erweiterungen nötig, so können Sie diese über unser kostenpflichtigen Support-Forum erhalten. Bitte erwerben Sie hierzu den kostenpflichtigen Forum Support. und melden sich dann mit dem Benutzer unter dem Sie den Support erworben haben an.

Forum Support ist umsonst, wenn Sie eine aktive Visforms Subscription oder eine aktive Subscription für das Bootstrap Carousel Modul haben. Bitte melden Sie sich mit dem entsprechenden Benutzer an, um eine Anfrage in unserem Forum zu stellen.

Lesender Zugriff auf das Forum ist für Jedermann möglich.

Topic-icon CSV-Export-Datei ohne Werte und Kopfzeile

Mehr
11 Monate 1 Woche her #6155 von Administrator
Administrator antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo,
könntest du folgenden Code testen?
Wenn iconv nicht installiert ist, wirft der Aufruf einen fatalen Error... Ich muss also wohl doch noch etwas weiter ausholen.
public function __construct($params) {
		// check that iconv is installed
		if ((!function_exists('iconv')) || (isset($params->usewindowscharset) && ($params->usewindowscharset == 0))) {
			$this->useWindowsCharacterSet = false;
		}
		else {
			$this->useWindowsCharacterSet = true;
		}
		$this->output_encoding = "windows-1250//TRANSLIT";
		$this->input_encoding = "UTF-8";
		$this->separator = (isset($params->expseparator)) ? $params->expseparator : ";";
	}

	public function convertCharacterSet($text) {
		if (!$this->useWindowsCharacterSet) {
			return $text;
		}
		// iconv returns false when characters cannot be converted i.e. because some files are not installed
		if (!(false === (bool) (iconv($this->input_encoding, $this->output_encoding, $text)))) {
			// convert characters into window characterset for easier use with excel
			return iconv($this->input_encoding, $this->output_encoding, $text);
		}
		return $text;
	}
Danke und Gruß,
Aicha

-- Visforms Developer --

I helped you? The best way to thank me is to post a review on Joomla! Extensions Directory or to use the donate button to the right and make a donation. :)

Always consult our documentations before asking a question on our forum, the answer is most probably there. ;)

Konnte ich dir helfen? Die beste Art mir zu danken ist es, ein Review auf Joomla! Extensions Directory zu schreiben oder den Spendenbutton rechts zu verwenden, um mir eine Spende zukommen zu lassen. :)

Bitte konsultiere immer zuerst unsere Dokumentationen bevor du eine Frage im Forum stellst, die Antwort ist bestimmt da. ;)

Enjoy Joomla!

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Monate 1 Woche her #6156 von yellowbird
yellowbird antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo Aicha,

mit vorhandener aber "defekter" iconv-Funktion sind die Formularfeldwerte auch mit diesem Code im CSV leer, bis auf die visform-eigenen Spalten.
Wenn ich allerdings models/visdatas.php richtig interpretiere, wird der visFormCsvHelper zwar in createExportBuffer() für die visForm-Spalten genutzt, nicht aber in createExportCell(); dort wird iconv direkt aufgerufen. Zeilen 325-331 müssten vielleicht durch $unicode_str_for_Excel= $csvHelper->convertCharacterSet($row->$prop) ersetzt werden. Die csv-Handler-Instanz müsste dann vielleicht bereits im Konstruktor erstellt werden.
Das würde jedenfalls erklären, warum in in meinem debug-Output im csv-helper die Formularfeldwerte gar nicht sehe. Oder verstehe ich den Codeaublauf falsch?

Gruß,
Marcel

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Monate 1 Woche her #6157 von yellowbird
yellowbird antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo Aicha,

am Rande: ich nutze inzwischen gern das PHP-eigene fputcsv(), weil es sich so bequem um die Delimiter etc. kümmert. Vielleicht nützlich.
if( ! function_exists('sputcsv')) {
function sputcsv(array $row, string $delimiter=",", string $enclosure='"', string $escape_char="\\") {
    $csvhnd=fopen('php://temp', 'r+');
    $res='';
    if(false===fputcsv($csvhnd, $row, $delimiter, $enclosure, $escape_char)) return false;
    rewind($csvhnd);
    $res=stream_get_contents($csvhnd);
    fclose($csvhnd);
    return $res;
}}  
function array_to_csv(array $lines, string $delimiter=",", string $enclosure='"', string $escape_char="\\") {
    $res='';
    foreach($lines as $row) {
        if( false === $csvline=sputcsv($row, $delimiter, $enclosure, $escape_char)) return false;
        $res.=$csvline;
    }   
    return $res;
}   

// Example call
$somedata=array(
    array( 'lorem', 'ipsum', 'dolor')
    ,array( '"one double quote', '"two double quotes"', '\"escaped quote')
    ,array( 'only one value in row')
    ,array( '012345', 0, 1234)
    ,array( "String with\nnew line", 'second string')
);  

echo array_to_csv($somedata, "\t", '"', "\r\n");

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Monate 1 Woche her #6158 von Administrator
Administrator antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo Marcel,
danke fürs Testen und deinen Input!!!

Es gab mit dem CSV-Export zuletzt das Problem, dass die Label für die visForms-eigenen Spalten überhaupt nicht durch das iconv gingen und dies bei den deutschen Texten mit Umlauten dazu geführt hat, diese diese nicht in den Windows-Zeichenstatz konvertiert wurden und es beim Öffnen mit Excel deshalb Probleme gab.

Da ich wusste, dass ich für das nächste große Visforms-Subscription Feature Release (3.4) den CSV-Export weiter ausbauen wollte, nämlich dahingehen, dass man auch vom Frontend aus Daten nach CSV exportieren kann und ich deshalb den ganzen Export-Code refaktoren werde, habe ich einfach schon mal dahingehend angefangen, dass ich die entsprechende Struktur geschaffen habe und diese für die visForms-eigenen Felder also, meinen Bugfix, auch verwende. Das große Refactoring des Codes für die eigentlichen visForms-Daten habe ich aber noch nicht ausgeführt. Deshalb ist der Code so verstreut (auf des model/visdatas und die neue Helper-Klasse). Das ist wirklich unfertig.

Aus deinem Test entnehme ich, dass mein Code, der das von dir untersuchte Problem fixen soll, wie erwartet funktioniert. Ich muss aber tatsächlich auch das Model noch anpassen. Ich werde also den Fix übergangsweise an dieser Stelle auch noch einbauen.

public function createExportCell($row, $type = Null, $params = Null, $prop = Null) {
    	...

        if ((!function_exists('iconv')) || (isset($params->usewindowscharset) && ($params->usewindowscharset == 0))) {
            $unicode_str_for_Excel = $row->$prop;
        }
        else {
	        if (!(false === (bool) (iconv("UTF-8", "windows-1250//TRANSLIT", $row->$prop)))) {
		        // convert characters into window characterset for easier use with excel
		        $unicode_str_for_Excel = iconv("UTF-8", "windows-1250//TRANSLIT", $row->$prop);
	        }
            else {
	            $unicode_str_for_Excel = $row->$prop;
            }
        }
        
        ...
    }

Das ist jetzt zwar nicht besonders elegant, sollte aber als Übergangslösung funktionieren und wird mit visForms 3.12.10 released.

Ab visForms 3.13/Subscription 3.4 wird dann der gesamte Code für den CSV-Export sauber über die Helper-Klasse laufen.

Hinsichtlich der Verwendung der php-eigenen fputcsv() bin ich nicht so überzeugt. Die Hauptarbeit besteht eigentlich darin, die Daten richtig zu prozessieren und der Delimiter war für mich eigentlich nur marginal. Aber vielleicht sehe ich das ja irgendwann auch mal anders. Danke auf jeden Fall für deinen Hinweis.

Gruß,
Aicha

-- Visforms Developer --

I helped you? The best way to thank me is to post a review on Joomla! Extensions Directory or to use the donate button to the right and make a donation. :)

Always consult our documentations before asking a question on our forum, the answer is most probably there. ;)

Konnte ich dir helfen? Die beste Art mir zu danken ist es, ein Review auf Joomla! Extensions Directory zu schreiben oder den Spendenbutton rechts zu verwenden, um mir eine Spende zukommen zu lassen. :)

Bitte konsultiere immer zuerst unsere Dokumentationen bevor du eine Frage im Forum stellst, die Antwort ist bestimmt da. ;)

Enjoy Joomla!

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Moderatoren: Administrator