@@ -24,26 +24,28 @@ public GoogleService(SheetsService sheetsService)
2424 _sheetsService = sheetsService ;
2525 }
2626
27+ private static int SeparationColumnPixelWidth { get ; set ; } = 20 ;
28+
2729 public async Task < Result > Export (
2830 CourseDTO course ,
2931 IOrderedEnumerable < StatisticsCourseMatesModel > statistics ,
30- [ FromBody ] GoogleSheetsRequest requestParameters )
32+ [ FromBody ] GoogleSheetsRequestModel requestModelParameters )
3133 {
32- if ( requestParameters . SheetName == null || requestParameters . SheetUrl == null )
34+ if ( requestModelParameters . SheetName == null || requestModelParameters . SheetUrl == null )
3335 return Result . Failed ( "Ошибка при получении данных о гугл-документе" ) ;
3436
35- var gettingSpreadsheetIdResult = ParseLink ( requestParameters . SheetUrl ) ;
37+ var gettingSpreadsheetIdResult = ParseLink ( requestModelParameters . SheetUrl ) ;
3638 if ( ! gettingSpreadsheetIdResult . Succeeded ) return Result . Failed ( gettingSpreadsheetIdResult . Errors ) ;
3739 var spreadsheetId = gettingSpreadsheetIdResult . Value ;
3840 Result result ;
3941 try
4042 {
41- var sheetId = await GetSheetId ( spreadsheetId , requestParameters . SheetName ) ;
43+ var sheetId = await GetSheetId ( spreadsheetId , requestModelParameters . SheetName ) ;
4244 if ( sheetId == null ) return Result . Failed ( "Лист с таким названием не найден" ) ;
4345
4446 var ( valueRange , range , updateStyleRequestBody ) = Generate (
45- statistics . ToList ( ) , course , requestParameters . SheetName , ( int ) sheetId ) ;
46-
47+ statistics . ToList ( ) , course , requestModelParameters . SheetName , ( int ) sheetId ) ;
48+
4749 var clearRequest = _sheetsService . Spreadsheets . Values . Clear ( new ClearValuesRequest ( ) , spreadsheetId , range ) ;
4850 await clearRequest . ExecuteAsync ( ) ;
4951 var updateStyleRequest = _sheetsService . Spreadsheets . BatchUpdate ( updateStyleRequestBody , spreadsheetId ) ;
@@ -125,11 +127,11 @@ private static (ValueRange ValueRange, string Range, BatchUpdateSpreadsheetReque
125127 headersFieldEndAddress = cell . LocalAddress ;
126128 }
127129
128- if ( cell . Style . Fill . BackgroundColor . Rgb == ExcelGenerator . RedColorRgb )
130+ if ( cell . Style . Fill . BackgroundColor . Rgb == ExcelGenerator . BlueArgbColor )
129131 {
130132 redCellsAddresses . Add ( cell . LocalAddress ) ;
131133 }
132- else if ( cell . Style . Fill . BackgroundColor . Rgb == ExcelGenerator . GrayColorRgb )
134+ else if ( cell . Style . Fill . BackgroundColor . Rgb == ExcelGenerator . GrayArgbColor )
133135 {
134136 grayCellsAddresses . Add ( cell . LocalAddress ) ;
135137 }
@@ -156,11 +158,14 @@ private static (ValueRange ValueRange, string Range, BatchUpdateSpreadsheetReque
156158 }
157159
158160 var batchUpdateRequest = new BatchUpdateSpreadsheetRequest ( ) ;
161+ batchUpdateRequest . Requests = new List < Request > ( ) ;
162+ AddClearStylesRequest ( batchUpdateRequest , worksheet , sheetId , range ) ;
159163 AddMergeRequests ( batchUpdateRequest , worksheet , sheetId , worksheet . MergedCells ) ;
160- AddColouredCellsRequests ( batchUpdateRequest , worksheet , sheetId , redCellsAddresses , ExcelGenerator . RedColor ) ;
161- AddColouredCellsRequests ( batchUpdateRequest , worksheet , sheetId , grayCellsAddresses , ExcelGenerator . GrayColor ) ;
164+ AddColouredCellsRequests ( batchUpdateRequest , worksheet , sheetId , redCellsAddresses , ExcelGenerator . BlueFloatArgbColor ) ;
165+ AddColouredCellsRequests ( batchUpdateRequest , worksheet , sheetId , grayCellsAddresses , ExcelGenerator . GrayFloatArgbColor ) ;
166+ AddUpdateCellsWidthRequest ( batchUpdateRequest , worksheet , sheetId , grayCellsAddresses , SeparationColumnPixelWidth ) ;
162167 AddCellsFormattingRequest ( batchUpdateRequest , worksheet , sheetId , range ) ;
163- AddHeadersFormattingRequest ( batchUpdateRequest , worksheet , sheetId , headersFieldEndAddress ) ;
168+ AddHeadersFormattingRequest ( batchUpdateRequest , worksheet , sheetId , $ " { sheetName } !A1: { headersFieldEndAddress } " ) ;
164169 AddBordersFormattingRequest ( batchUpdateRequest , worksheet , sheetId , cellsWithBorderAddresses , ExcelGenerator . EquivalentBorderStyle ) ;
165170 return ( valueRange , rangeWithSheetTitle , batchUpdateRequest ) ;
166171 }
@@ -177,6 +182,25 @@ private static GridRange FillGridRange(ExcelWorksheet worksheet, string rangeAdd
177182 return gridRange ;
178183 }
179184
185+ private static void AddClearStylesRequest (
186+ BatchUpdateSpreadsheetRequest batchUpdateRequest ,
187+ ExcelWorksheet worksheet ,
188+ int sheetId ,
189+ string range )
190+ {
191+ var clearStylesRequest = new RepeatCellRequest ( ) ;
192+ clearStylesRequest . Range = FillGridRange ( worksheet , range , sheetId ) ;
193+ var cell = new CellData ( ) ;
194+ cell . UserEnteredFormat = new CellFormat ( ) ;
195+ clearStylesRequest . Cell = cell ;
196+ clearStylesRequest . Fields = "userEnteredFormat" ;
197+
198+ var request = new Request ( ) ;
199+ request . RepeatCell = clearStylesRequest ;
200+ batchUpdateRequest . Requests . Add ( request ) ;
201+ }
202+
203+
180204 private static void AddBordersFormattingRequest (
181205 BatchUpdateSpreadsheetRequest batchUpdateRequest ,
182206 ExcelWorksheet worksheet ,
@@ -206,13 +230,13 @@ private static void AddBordersFormattingRequest(
206230 updateBorderRequest . Right = border ;
207231 break ;
208232 }
209-
233+
210234 var request = new Request ( ) ;
211235 request . UpdateBorders = updateBorderRequest ;
212236 batchUpdateRequest . Requests . Add ( request ) ;
213237 }
214238 }
215-
239+
216240 private static void AddHeadersFormattingRequest (
217241 BatchUpdateSpreadsheetRequest batchUpdateRequest ,
218242 ExcelWorksheet worksheet ,
@@ -222,9 +246,11 @@ private static void AddHeadersFormattingRequest(
222246 var styleBoldCellsRequest = new RepeatCellRequest ( ) ;
223247 styleBoldCellsRequest . Range = FillGridRange ( worksheet , range , sheetId ) ;
224248 var cell = new CellData ( ) ;
249+ cell . UserEnteredFormat = new CellFormat ( ) ;
250+ cell . UserEnteredFormat . TextFormat = new TextFormat ( ) ;
225251 cell . UserEnteredFormat . TextFormat . Bold = true ;
226252 styleBoldCellsRequest . Cell = cell ;
227- styleBoldCellsRequest . Fields = "userEnteredFormat(textFormat)" ;
253+ styleBoldCellsRequest . Fields = "userEnteredFormat(textFormat.bold )" ;
228254
229255 var request = new Request ( ) ;
230256 request . RepeatCell = styleBoldCellsRequest ;
@@ -240,12 +266,14 @@ private static void AddCellsFormattingRequest(
240266 var cellsFormatRequest = new RepeatCellRequest ( ) ;
241267 cellsFormatRequest . Range = FillGridRange ( worksheet , range , sheetId ) ;
242268 var cell = new CellData ( ) ;
269+ cell . UserEnteredFormat = new CellFormat ( ) ;
243270 cell . UserEnteredFormat . HorizontalAlignment = "CENTER" ;
244- cell . UserEnteredFormat . VerticalAlignment = "CENTER" ;
271+ cell . UserEnteredFormat . VerticalAlignment = "MIDDLE" ;
272+ cell . UserEnteredFormat . TextFormat = new TextFormat ( ) ;
245273 cell . UserEnteredFormat . TextFormat . FontSize = ExcelGenerator . FontSize ;
246274 cell . UserEnteredFormat . TextFormat . FontFamily = ExcelGenerator . FontFamily ;
247275 cellsFormatRequest . Cell = cell ;
248- cellsFormatRequest . Fields = "userEnteredFormat(horizontalAlignment,verticalAlignment,textFormat)" ;
276+ cellsFormatRequest . Fields = "userEnteredFormat(horizontalAlignment,verticalAlignment,textFormat.fontSize,textFormat.fontFamily )" ;
249277
250278 var request = new Request ( ) ;
251279 request . RepeatCell = cellsFormatRequest ;
@@ -263,7 +291,7 @@ private static void AddMergeRequests(
263291 var mergedCellsAddress = mergeCellsCollection [ i ] ;
264292 var gridRange = FillGridRange ( worksheet , mergedCellsAddress , sheetId ) ;
265293 var mergeCellsRequest = new MergeCellsRequest ( ) ;
266- mergeCellsRequest . MergeType = "MERGE_COLUMNS " ;
294+ mergeCellsRequest . MergeType = "MERGE_ALL " ;
267295 mergeCellsRequest . Range = gridRange ;
268296
269297 var request = new Request ( ) ;
@@ -272,19 +300,49 @@ private static void AddMergeRequests(
272300 }
273301 }
274302
303+ private static void AddUpdateCellsWidthRequest (
304+ BatchUpdateSpreadsheetRequest batchUpdateRequest ,
305+ ExcelWorksheet worksheet ,
306+ int sheetId ,
307+ List < string > cellsAddresses ,
308+ int cellsPixelWidth )
309+ {
310+ for ( var i = 0 ; i < cellsAddresses . Count ; ++ i )
311+ {
312+ var cellAddress = cellsAddresses [ i ] ;
313+ var rangeInfo = worksheet . Cells [ cellAddress ] ;
314+ var updateWidthRequest = new UpdateDimensionPropertiesRequest ( ) ;
315+ updateWidthRequest . Range = new DimensionRange ( )
316+ {
317+ SheetId = sheetId ,
318+ Dimension = "COLUMNS" ,
319+ StartIndex = rangeInfo . Start . Column - 1 ,
320+ EndIndex = rangeInfo . End . Column ,
321+ } ;
322+ updateWidthRequest . Fields = "*" ;
323+ updateWidthRequest . Properties = new DimensionProperties ( ) ;
324+ updateWidthRequest . Properties . PixelSize = cellsPixelWidth ;
325+
326+ var request = new Request ( ) ;
327+ request . UpdateDimensionProperties = updateWidthRequest ;
328+ batchUpdateRequest . Requests . Add ( request ) ;
329+ }
330+ }
331+
275332 private static void AddColouredCellsRequests (
276333 BatchUpdateSpreadsheetRequest batchUpdateRequest ,
277334 ExcelWorksheet worksheet ,
278335 int sheetId ,
279336 List < string > colouredCellsAddresses ,
280- ( int Alpha , int Red , int Green , int Blue ) color )
337+ ( float Alpha , float Red , float Green , float Blue ) color )
281338 {
282339 for ( var i = 0 ; i < colouredCellsAddresses . Count ; ++ i )
283340 {
284341 var cellAddress = colouredCellsAddresses [ i ] ;
285342 var colorInRedRequest = new RepeatCellRequest ( ) ;
286343 colorInRedRequest . Range = FillGridRange ( worksheet , cellAddress , sheetId ) ;
287344 var cell = new CellData ( ) ;
345+ cell . UserEnteredFormat = new CellFormat ( ) ;
288346 cell . UserEnteredFormat . BackgroundColor = new Color ( )
289347 {
290348 Alpha = color . Alpha ,
@@ -293,13 +351,14 @@ private static void AddColouredCellsRequests(
293351 Blue = color . Blue ,
294352 } ;
295353 colorInRedRequest . Fields = "userEnteredFormat(backgroundColor)" ;
354+ colorInRedRequest . Cell = cell ;
296355
297356 var request = new Request ( ) ;
298357 request . RepeatCell = colorInRedRequest ;
299358 batchUpdateRequest . Requests . Add ( request ) ;
300359 }
301360 }
302-
361+
303362 private async Task < int ? > GetSheetId ( string spreadsheetId , string sheetName )
304363 {
305364 var spreadsheetGetRequest = _sheetsService . Spreadsheets . Get ( spreadsheetId ) ;
0 commit comments