You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
7.9 KiB

2 years ago
using System.Data;
using System.Diagnostics;
using Aspose.Cells;
namespace MergeMailExcel
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>EXCEL<45>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
readonly string _hzFileName = "<22><><EFBFBD>ܱ<EFBFBD>.xlsx";
private int fRow, fCol;
bool CheckFileName(string fileName)
{
if (fileName == _hzFileName) return true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
if (!fileName.StartsWith("<22><>")) return false;//<2F><>Ҫ<EFBFBD><D2AA>"<22><>"<22><>ͷ
if (fileName.IndexOf("<22><>") <= 0) return false;//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>"<22><>"
var ls = System.Text.RegularExpressions.Regex.Matches(fileName, "<22><>").Count;
var rs = System.Text.RegularExpressions.Regex.Matches(fileName, "<22><>").Count;
if (ls != 1 || rs != 1) return false;//<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>һ<EFBFBD><D2BB>
return true;
}
public string Getzm(int idx)
{
var dividend = idx;
var columnName = string.Empty;
while (dividend > 0)
{
var modulo = (dividend - 1) % 26;
columnName = Convert.ToChar(65 + modulo) + columnName;
dividend = (dividend - modulo) / 26;
}
return columnName;
}
private void button1_Click(object sender, EventArgs e)
{
fRow = 0; fCol=0;
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
folderBrowserDialog1.Description = "<22><>ѡ<EFBFBD><D1A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD>Excel<65><6C><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>";
folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;
folderBrowserDialog1.ShowNewFolderButton = false;
if (folderBrowserDialog1.ShowDialog() != DialogResult.OK) return;
var folderPath = folderBrowserDialog1.SelectedPath;
var files = Directory.GetFiles(folderPath);
//<2F><>ȡExcel
var dt = new DataTable();
var flag = false;
var fileName = "";
try
{
foreach (var fileFullPath in files)
{
fileName = fileFullPath;
fileName = fileName.Substring(fileName.LastIndexOf("\\") + 1);
if (fileName == _hzFileName) continue;
if (!CheckFileName(fileName))
{
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>׼Ҫ<D7BC><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>" + fileName, "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
if (fileFullPath[(fileFullPath.LastIndexOf('.') + 1)..].ToLower() == "xlsx")
{
var wk = new Workbook(fileFullPath);
var ws = wk.Worksheets[0];
var rowsCnt = ws.Cells.MaxRow + 1;
var colCnt = ws.Cells.MaxColumn + 1;
if (rowsCnt != 3 && rowsCnt != 4)
{
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>е<EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>" + fileName + "<22><>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (fRow == 0) fRow = rowsCnt;
if (fCol == 0) fCol = colCnt;
if (rowsCnt != fRow || colCnt != fCol)
{
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>" + fileName + "<22><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+fRow+",<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>:"+rowsCnt+",<2C><>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+fCol+",<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+colCnt, "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
var dt2 = ws.Cells.ExportDataTable(0, 0, rowsCnt, colCnt);
if (!flag)
{
//<2F><><EFBFBD><EFBFBD>DataTable<6C>
for (var i = 0; i < dt2.Columns.Count; i++) dt.Columns.Add(i.ToString());
flag = true;
}
//<2F>ӽ<EFBFBD>ȥ
dt.Rows.Add(dt2.Rows[fRow - 1].ItemArray);
}
}
if (files.Length > 0)
{
var hzFile = folderPath + "\\" + _hzFileName;
File.Copy(files[0], hzFile, true);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
var wk = new Workbook(hzFile);
var ws = wk.Worksheets[0];
var startRowCnt = ws.Cells.MaxRow + 1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
var style = wk.Styles[wk.Styles.Add()];
style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>
style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20>ұ߽<D2B1><DFBD><EFBFBD>
style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20>ϱ߽<CFB1><DFBD><EFBFBD>
style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20>±߽<C2B1><DFBD><EFBFBD>
style.HorizontalAlignment = TextAlignmentType.Center; //<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD>ʽ<EBB7BD><CABD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
style.VerticalAlignment = TextAlignmentType.Center;
style.Font.Name = "<22><><EFBFBD><EFBFBD>"; //<2F><><EFBFBD><EFBFBD>
style.Font.Size = 11; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
for (var i = 0; i < dt.Rows.Count; i++)
{
for (var j = 0; j < dt.Columns.Count; j++)
{
if (j == 0) ws.Cells[i + fRow - 1, j].PutValue(dt.Rows[i][j].ToString());
else
{
double v;
double.TryParse(dt.Rows[i][j].ToString(), out v);
ws.Cells[i + fRow - 1, j].PutValue(v);
}
ws.Cells[i + fRow - 1, j].SetStyle(style); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
}
}
//<2F><><EFBFBD><EFBFBD> SUM<55><4D><EFBFBD><EFBFBD>
var rowsCnt = ws.Cells.MaxRow + 1;
var colCnt = ws.Cells.MaxColumn;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>ɫ
style.ForegroundColor = Color.LightSkyBlue;
style.Pattern = BackgroundType.Solid;
style.Font.IsBold = true;
ws.Cells[rowsCnt, 0].PutValue("<22>ܼ<EFBFBD>");
ws.Cells[rowsCnt, 0].SetStyle(style); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
for (var i = 1; i <= colCnt; i++)
{
var zm = Getzm(i + 1);
ws.Cells[rowsCnt, i].Formula = "=sum(" + zm + startRowCnt+":" + zm + rowsCnt + ")";
ws.Cells[rowsCnt, i].SetStyle(style); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
}
wk.Save(hzFile); //<2F><><EFBFBD><EFBFBD>
MessageBox.Show("<22><>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>", "<22>ɹ<EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Information);
Process.Start("rundll32.exe", "shell32,OpenAs_RunDLL "+ hzFile);
}
else
{
MessageBox.Show(<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>Ժϲ<D4BA><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> <20><>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (IOException ioErr)
{
MessageBox.Show("<22>Dz<EFBFBD><C7B2><EFBFBD>Ŀ¼<C4BF>µ<EFBFBD>Excel<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>У<EFBFBD>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (CellsException ce)
{
MessageBox.Show(fileName + "<22><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}