23
23
import org .springframework .transaction .annotation .Transactional ;
24
24
25
25
import java .io .*;
26
+ import java .nio .charset .StandardCharsets ;
26
27
import java .util .*;
27
28
import java .util .concurrent .TimeUnit ;
28
29
import java .util .concurrent .atomic .AtomicReference ;
@@ -122,18 +123,28 @@ public byte[] exportToCsv(ShortCircuitAnalysisResult result, List<String> header
122
123
List <FaultResult > faultResults = result .getFaults ();
123
124
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream ();
124
125
ZipOutputStream zipOutputStream = new ZipOutputStream (outputStream )) {
125
- CsvWriterSettings settings = new CsvWriterSettings ();
126
- CsvWriter csvWriter = new CsvWriter (zipOutputStream , settings );
127
126
zipOutputStream .putNextEntry (new ZipEntry ("shortCircuit_result.csv" ));
127
+
128
+ // This code is for writing the UTF-8 Byte Order Mark (BOM) to a ZipOutputStream
129
+ // by adding BOM to the beginning of file to help excel in some versions to detect this is UTF-8 encoding bytes
130
+ zipOutputStream .write (0xef );
131
+ zipOutputStream .write (0xbb );
132
+ zipOutputStream .write (0xbf );
133
+
134
+ CsvWriterSettings settings = new CsvWriterSettings ();
135
+ CsvWriter csvWriter = new CsvWriter (zipOutputStream , StandardCharsets .UTF_8 , settings );
136
+
137
+ // Write headers to the CSV file
128
138
csvWriter .writeHeaders (headersList );
129
139
140
+ // Write data to the CSV file
130
141
for (FaultResult faultResult : faultResults ) {
131
142
// Process faultResult data
132
143
List <String > faultRowData = new ArrayList <>(List .of (
133
144
faultResult .getFault ().getId (),
134
145
enumValueTranslations .getOrDefault (faultResult .getFault ().getFaultType (), "" ),
135
146
"" ,
136
- Double .toString (faultResult .getPositiveMagnitude ())
147
+ Double .isNaN ( faultResult . getPositiveMagnitude ()) ? "" : Double . toString (faultResult .getPositiveMagnitude ())
137
148
));
138
149
139
150
List <LimitViolation > limitViolations = faultResult .getLimitViolations ();
@@ -149,8 +160,8 @@ public byte[] exportToCsv(ShortCircuitAnalysisResult result, List<String> header
149
160
150
161
ShortCircuitLimits shortCircuitLimits = faultResult .getShortCircuitLimits ();
151
162
faultRowData .addAll (List .of (
152
- Double .toString (shortCircuitLimits .getIpMin ()),
153
- Double .toString (shortCircuitLimits .getIpMax ()),
163
+ Double .toString (shortCircuitLimits .getIpMin () / 1000.0 ),
164
+ Double .toString (shortCircuitLimits .getIpMax () / 1000.0 ),
154
165
Double .toString (faultResult .getShortCircuitPower ()),
155
166
Double .toString (shortCircuitLimits .getDeltaCurrentIpMin ()),
156
167
Double .toString (shortCircuitLimits .getDeltaCurrentIpMax ())
@@ -166,7 +177,7 @@ public byte[] exportToCsv(ShortCircuitAnalysisResult result, List<String> header
166
177
faultResult .getFault ().getId (),
167
178
"" ,
168
179
feederResult .getConnectableId (),
169
- Double .toString (feederResult .getPositiveMagnitude ())
180
+ Double .isNaN ( feederResult . getPositiveMagnitude ()) ? "" : Double . toString (feederResult .getPositiveMagnitude ())
170
181
));
171
182
csvWriter .writeRow (feederRowData );
172
183
}
0 commit comments