Skip to content

Commit 19cfdd1

Browse files
author
LokeshPalani
committed
Add the missed files in the office chart
1 parent 4952485 commit 19cfdd1

21 files changed

+5610
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import 'dart:io';
2+
3+
import 'package:open_file/open_file.dart' as open_file;
4+
import 'package:path_provider/path_provider.dart' as path_provider;
5+
// ignore: depend_on_referenced_packages
6+
import 'package:path_provider_platform_interface/path_provider_platform_interface.dart';
7+
8+
///To save the Excel file in the device
9+
///To save the Excel file in the device
10+
Future<void> saveAndLaunchFile(List<int> bytes, String fileName) async {
11+
//Get the storage folder location using path_provider package.
12+
String? path;
13+
if (Platform.isAndroid ||
14+
Platform.isIOS ||
15+
Platform.isLinux ||
16+
Platform.isWindows) {
17+
final Directory directory =
18+
await path_provider.getApplicationSupportDirectory();
19+
path = directory.path;
20+
} else {
21+
path = await PathProviderPlatform.instance.getApplicationSupportPath();
22+
}
23+
final File file =
24+
File(Platform.isWindows ? '$path\\$fileName' : '$path/$fileName');
25+
await file.writeAsBytes(bytes, flush: true);
26+
if (Platform.isAndroid || Platform.isIOS) {
27+
//Launch the file (used open_file package)
28+
await open_file.OpenFile.open('$path/$fileName');
29+
} else if (Platform.isWindows) {
30+
await Process.run('start', <String>['$path\\$fileName'], runInShell: true);
31+
} else if (Platform.isMacOS) {
32+
await Process.run('open', <String>['$path/$fileName'], runInShell: true);
33+
} else if (Platform.isLinux) {
34+
await Process.run('xdg-open', <String>['$path/$fileName'],
35+
runInShell: true);
36+
}
37+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
///Dart imports
2+
import 'dart:async';
3+
import 'dart:convert';
4+
// ignore: avoid_web_libraries_in_flutter
5+
import 'dart:html';
6+
7+
///To save the Excel file in the device
8+
///To save the Excel file in the device
9+
Future<void> saveAndLaunchFile(List<int> bytes, String fileName) async {
10+
AnchorElement(
11+
href:
12+
'data:application/octet-stream;charset=utf-16le;base64,${base64.encode(bytes)}')
13+
..setAttribute('download', fileName)
14+
..click();
15+
}
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import 'package:flutter/material.dart';
2+
// ignore: depend_on_referenced_packages
3+
import 'package:syncfusion_flutter_xlsio/xlsio.dart' hide Column;
4+
import 'package:syncfusion_officechart/officechart.dart';
5+
6+
//Local imports
7+
import 'helper/save_file_mobile.dart'
8+
if (dart.library.html) 'helper/save_file_web.dart';
9+
10+
void main() {
11+
runApp(CreateOfficeChartWidget());
12+
}
13+
14+
/// Represents the office chart widget class.
15+
class CreateOfficeChartWidget extends StatelessWidget {
16+
@override
17+
Widget build(BuildContext context) {
18+
return const MaterialApp(
19+
home: CreateOfficeChartStatefulWidget(title: 'Create Excel document'),
20+
);
21+
}
22+
}
23+
24+
/// Represents the office chart stateful widget class.
25+
class CreateOfficeChartStatefulWidget extends StatefulWidget {
26+
/// Initalize the instance of the [CreateOfficeChartStatefulWidget] class.
27+
const CreateOfficeChartStatefulWidget({Key? key, required this.title})
28+
: super(key: key);
29+
30+
/// title.
31+
final String title;
32+
@override
33+
// ignore: library_private_types_in_public_api
34+
_CreateOfficeChartState createState() => _CreateOfficeChartState();
35+
}
36+
37+
class _CreateOfficeChartState extends State<CreateOfficeChartStatefulWidget> {
38+
@override
39+
Widget build(BuildContext context) {
40+
return Scaffold(
41+
appBar: AppBar(
42+
title: Text(widget.title),
43+
),
44+
body: Center(
45+
child: Column(
46+
mainAxisAlignment: MainAxisAlignment.center,
47+
children: <Widget>[
48+
TextButton(
49+
style: TextButton.styleFrom(
50+
foregroundColor: Colors.white,
51+
backgroundColor: Colors.lightBlue,
52+
disabledForegroundColor: Colors.grey,
53+
),
54+
onPressed: generateOfficeChart,
55+
child: const Text('Generate Excel Chart'),
56+
)
57+
],
58+
),
59+
),
60+
);
61+
}
62+
63+
Future<void> generateOfficeChart() async {
64+
//Create a Excel document.
65+
66+
//Creating a workbook.
67+
final Workbook workbook = Workbook(0);
68+
//Adding a Sheet with name to workbook.
69+
final Worksheet sheet1 = workbook.worksheets.addWithName('Budget');
70+
sheet1.showGridlines = false;
71+
72+
sheet1.enableSheetCalculations();
73+
sheet1.getRangeByIndex(1, 1).columnWidth = 19.86;
74+
sheet1.getRangeByIndex(1, 2).columnWidth = 14.38;
75+
sheet1.getRangeByIndex(1, 3).columnWidth = 12.98;
76+
sheet1.getRangeByIndex(1, 4).columnWidth = 12.08;
77+
sheet1.getRangeByIndex(1, 5).columnWidth = 8.82;
78+
sheet1.getRangeByName('A1:A18').rowHeight = 20.2;
79+
80+
//Adding cell style.
81+
final Style style1 = workbook.styles.add('Style1');
82+
style1.backColor = '#D9E1F2';
83+
style1.hAlign = HAlignType.left;
84+
style1.vAlign = VAlignType.center;
85+
style1.bold = true;
86+
87+
final Style style2 = workbook.styles.add('Style2');
88+
style2.backColor = '#8EA9DB';
89+
style2.vAlign = VAlignType.center;
90+
style2.numberFormat = r'[Red](\$#,###)';
91+
style2.bold = true;
92+
93+
sheet1.getRangeByName('A10').cellStyle = style1;
94+
sheet1.getRangeByName('B10:D10').cellStyle.backColor = '#D9E1F2';
95+
sheet1.getRangeByName('B10:D10').cellStyle.hAlign = HAlignType.right;
96+
sheet1.getRangeByName('B10:D10').cellStyle.vAlign = VAlignType.center;
97+
sheet1.getRangeByName('B10:D10').cellStyle.bold = true;
98+
99+
sheet1.getRangeByName('A11:A17').cellStyle.vAlign = VAlignType.center;
100+
sheet1.getRangeByName('A11:D17').cellStyle.borders.bottom.lineStyle =
101+
LineStyle.thin;
102+
sheet1.getRangeByName('A11:D17').cellStyle.borders.bottom.color = '#BFBFBF';
103+
104+
sheet1.getRangeByName('D18').cellStyle = style2;
105+
sheet1.getRangeByName('D18').cellStyle.vAlign = VAlignType.center;
106+
sheet1.getRangeByName('A18:C18').cellStyle.backColor = '#8EA9DB';
107+
sheet1.getRangeByName('A18:C18').cellStyle.vAlign = VAlignType.center;
108+
sheet1.getRangeByName('A18:C18').cellStyle.bold = true;
109+
sheet1.getRangeByName('A18:C18').numberFormat = r'\$#,###';
110+
111+
sheet1.getRangeByIndex(10, 1).setText('Category');
112+
sheet1.getRangeByIndex(10, 2).setText('Expected cost');
113+
sheet1.getRangeByIndex(10, 3).setText('Actual Cost');
114+
sheet1.getRangeByIndex(10, 4).setText('Difference');
115+
sheet1.getRangeByIndex(11, 1).setText('Venue');
116+
sheet1.getRangeByIndex(12, 1).setText('Seating & Decor');
117+
sheet1.getRangeByIndex(13, 1).setText('Technical team');
118+
sheet1.getRangeByIndex(14, 1).setText('Performers');
119+
sheet1.getRangeByIndex(15, 1).setText("Performer's transport");
120+
sheet1.getRangeByIndex(16, 1).setText("Performer's stay");
121+
sheet1.getRangeByIndex(17, 1).setText('Marketing');
122+
sheet1.getRangeByIndex(18, 1).setText('Total');
123+
124+
sheet1.getRangeByName('B11:D17').numberFormat = r'\$#,###';
125+
sheet1.getRangeByName('D11').numberFormat = r'[Red](\$#,###)';
126+
sheet1.getRangeByName('D12').numberFormat = r'[Red](\$#,###)';
127+
sheet1.getRangeByName('D14').numberFormat = r'[Red](\$#,###)';
128+
129+
sheet1.getRangeByName('B11').setNumber(16250);
130+
sheet1.getRangeByName('B12').setNumber(1600);
131+
sheet1.getRangeByName('B13').setNumber(1000);
132+
sheet1.getRangeByName('B14').setNumber(12400);
133+
sheet1.getRangeByName('B15').setNumber(3000);
134+
sheet1.getRangeByName('B16').setNumber(4500);
135+
sheet1.getRangeByName('B17').setNumber(3000);
136+
sheet1.getRangeByName('B18').setFormula('=SUM(B11:B17)');
137+
138+
sheet1.getRangeByName('C11').setNumber(17500);
139+
sheet1.getRangeByName('C12').setNumber(1828);
140+
sheet1.getRangeByName('C13').setNumber(800);
141+
sheet1.getRangeByName('C14').setNumber(14000);
142+
sheet1.getRangeByName('C15').setNumber(2600);
143+
sheet1.getRangeByName('C16').setNumber(4464);
144+
sheet1.getRangeByName('C17').setNumber(2700);
145+
sheet1.getRangeByName('C18').setFormula('=SUM(C11:C17)');
146+
147+
sheet1.getRangeByName('D11').setFormula('=IF(C11>B11,C11-B11,B11-C11)');
148+
sheet1.getRangeByName('D12').setFormula('=IF(C12>B12,C12-B12,B12-C12)');
149+
sheet1.getRangeByName('D13').setFormula('=IF(C13>B13,C13-B13,B13-C13)');
150+
sheet1.getRangeByName('D14').setFormula('=IF(C14>B14,C14-B14,B14-C14)');
151+
sheet1.getRangeByName('D15').setFormula('=IF(C15>B15,C15-B15,B15-C15)');
152+
sheet1.getRangeByName('D16').setFormula('=IF(C16>B16,C16-B16,B16-C16)');
153+
sheet1.getRangeByName('D17').setFormula('=IF(C17>B17,C17-B17,B17-C17)');
154+
sheet1.getRangeByName('D18').setFormula('=IF(C18>B18,C18-B18,B18-C18)');
155+
156+
// Create chart collection for worksheet.
157+
final ChartCollection charts = ChartCollection(sheet1);
158+
159+
// Add a chart to the chart collection.
160+
final Chart chart = charts.add();
161+
chart.chartType = ExcelChartType.pie;
162+
chart.dataRange = sheet1.getRangeByName('A11:B17');
163+
chart.isSeriesInRows = false;
164+
chart.chartTitle = 'Event Expenses';
165+
chart.chartTitleArea.bold = true;
166+
chart.chartTitleArea.size = 16;
167+
chart.topRow = 1;
168+
chart.bottomRow = 10;
169+
chart.leftColumn = 1;
170+
chart.rightColumn = 5;
171+
sheet1.charts = charts;
172+
173+
//Save and launch Excel.
174+
final List<int> bytes = workbook.saveAsStream();
175+
workbook.dispose();
176+
177+
await saveAndLaunchFile(bytes, 'ExpenseReport.xlsx');
178+
}
179+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
library officechart;
2+
3+
import 'dart:convert';
4+
import 'dart:core';
5+
6+
import 'package:archive/archive.dart';
7+
8+
import 'package:syncfusion_flutter_xlsio/xlsio.dart';
9+
import 'package:xml/xml.dart';
10+
11+
part 'src/chart/chart_axis.dart';
12+
part 'src/chart/chart_category_axis.dart';
13+
part 'src/chart/chart_collection.dart';
14+
part 'src/chart/chart_datalabel.dart';
15+
part 'src/chart/chart_enum.dart';
16+
//Src
17+
part 'src/chart/chart_impl.dart';
18+
part 'src/chart/chart_legend.dart';
19+
part 'src/chart/chart_plotarea.dart';
20+
part 'src/chart/chart_serialization.dart';
21+
part 'src/chart/chart_format.dart';
22+
part 'src/chart/chart_fomat_impl.dart';
23+
part 'src/chart/chart_serie.dart';
24+
part 'src/chart/chart_serie_dataformat.dart';
25+
part 'src/chart/chartserie_dataformat_impl.dart';
26+
part 'src/chart/chart_series_collection.dart';
27+
part 'src/chart/chart_text_area.dart';
28+
part 'src/chart/chart_value_axis.dart';
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
part of officechart;
2+
3+
/// Represents an axis on the chart.
4+
class ChartAxis {
5+
/// Represents the parent chart.
6+
late Chart _parentChart;
7+
8+
/// Represent the chart text area object.
9+
ChartTextArea? _titleArea;
10+
11+
/// Represents number format.
12+
late String numberFormat;
13+
14+
/// Represents minimumvalue of Axis.
15+
double _minimumValue = 0;
16+
17+
/// Represents maximum value of Axis.
18+
double _maximumValue = 0;
19+
20+
/// Gets or sets a boolean value indicating if the axis has major grid lines.
21+
bool hasMajorGridLines = false;
22+
23+
/// Automatic minimum selected.
24+
bool _isAutoMin = true;
25+
26+
/// Automatic minimum selected.
27+
bool _isAutoMax = true;
28+
29+
/// Gets chart text area object.
30+
ChartTextArea get titleArea {
31+
_titleArea ??= ChartTextArea(_parentChart);
32+
33+
return _titleArea!;
34+
}
35+
36+
/// Sets chart text area object.
37+
set titleArea(ChartTextArea? value) {
38+
_titleArea = value;
39+
}
40+
41+
/// Gets chart axis title.
42+
String? get title {
43+
if (_titleArea == null) {
44+
return null;
45+
}
46+
return _titleArea!.text;
47+
}
48+
49+
/// Sets chart axis title.
50+
set title(String? value) {
51+
titleArea.text = value;
52+
}
53+
54+
/// Gets indicates whether chart axis have title or not.
55+
bool get _hasAxisTitle {
56+
return _titleArea != null;
57+
}
58+
59+
/// Represents minimumvalue of Axis.
60+
double get minimumValue {
61+
return _minimumValue;
62+
}
63+
64+
/// Sets minimumvalue of Axis.
65+
set minimumValue(double value) {
66+
_minimumValue = value;
67+
_isAutoMin = false;
68+
}
69+
70+
/// Represents maximumvalue of Axis.
71+
double get maximumValue {
72+
return _maximumValue;
73+
}
74+
75+
/// Sets maximumvalue of Axis.
76+
set maximumValue(double value) {
77+
_maximumValue = value;
78+
_isAutoMax = false;
79+
}
80+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
part of officechart;
2+
3+
/// Represents an axis on the chart.
4+
class ChartCategoryAxis extends ChartAxis {
5+
/// Create an instances of [ChartCategoryAxis] class.
6+
ChartCategoryAxis(Worksheet worksheet, Chart chart) {
7+
_sheet = worksheet;
8+
_chart = chart;
9+
super._parentChart = _chart;
10+
}
11+
12+
/// Parent worksheet.
13+
// ignore: unused_field
14+
late Worksheet _sheet;
15+
16+
/// True to cut unused plot area. otherwise False. Default for area and surface charts.
17+
// ignore: prefer_final_fields
18+
bool _isBetween = false;
19+
20+
/// Parent chart.
21+
late Chart _chart;
22+
23+
/// sets the category labels for the chart.
24+
// ignore: avoid_setters_without_getters
25+
set _categoryLabels(Range? value) {
26+
final ChartSeriesCollection coll = _chart.series;
27+
final int iLen = coll.count;
28+
for (int i = 0; i < iLen; i++) {
29+
coll[i]._categoryLabels = value;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)